fix(docker): surface backend crash logs in docker logs and print DB target
Build and Deploy / build-and-push (push) Successful in 52s

This commit is contained in:
2026-07-26 15:20:56 +08:00
parent afe7833539
commit 472b956203
4 changed files with 51 additions and 15 deletions
+4 -2
View File
@@ -29,13 +29,15 @@ COPY --from=backend-builder /taskpool /app/taskpool
# Copy nginx config (modified for localhost) # Copy nginx config (modified for localhost)
COPY nginx-standalone.conf /etc/nginx/http.d/default.conf COPY nginx-standalone.conf /etc/nginx/http.d/default.conf
# Copy supervisor config # Copy supervisor config + backend wrapper (logs go to docker logs)
COPY supervisord.conf /etc/supervisord.conf COPY supervisord.conf /etc/supervisord.conf
COPY docker/start-backend.sh /app/start-backend.sh
# Create data directories and ship example config (used when no volume config) # Create data directories and ship example config (used when no volume config)
COPY configs/config.example.ini /app/configs/config.example.ini COPY configs/config.example.ini /app/configs/config.example.ini
RUN mkdir -p /app/data /app/configs /app/envs /app/logs \ RUN mkdir -p /app/data /app/configs /app/envs /app/logs \
&& chmod +x /app/taskpool && chmod +x /app/taskpool /app/start-backend.sh \
&& apk add --no-cache wget ca-certificates
WORKDIR /app WORKDIR /app
EXPOSE 3000 8052 EXPOSE 3000 8052
+22
View File
@@ -0,0 +1,22 @@
#!/bin/sh
set -eu
cd /app
echo "[backend-wrapper] starting taskpool server"
echo "[backend-wrapper] cwd=$(pwd)"
echo "[backend-wrapper] BH_SERVER_HOST=${BH_SERVER_HOST:-}"
echo "[backend-wrapper] BH_SERVER_PORT=${BH_SERVER_PORT:-}"
echo "[backend-wrapper] BH_DB_TYPE=${BH_DB_TYPE:-}"
echo "[backend-wrapper] BH_DB_HOST=${BH_DB_HOST:-}"
echo "[backend-wrapper] BH_DB_PORT=${BH_DB_PORT:-}"
echo "[backend-wrapper] BH_DB_USER=${BH_DB_USER:-}"
echo "[backend-wrapper] BH_DB_NAME=${BH_DB_NAME:-}"
echo "[backend-wrapper] BH_DB_PATH=${BH_DB_PATH:-}"
echo "[backend-wrapper] config.ini exists=$([ -f /app/configs/config.ini ] && echo yes || echo no)"
# 避免空目录挂载导致权限/路径问题
mkdir -p /app/data /app/configs /app/envs /app/logs /app/data/scripts
# 直接前台运行,日志打到容器 stdout/stderr,方便 docker logs 排查
exec /app/taskpool server
+10
View File
@@ -133,7 +133,17 @@ func (a *App) initDatabase() {
SSLMode: a.Config.Database.SSLMode, SSLMode: a.Config.Database.SSLMode,
} }
// 启动期打印有效 DB 配置(不含密码),便于 Docker 排查
if dbCfg.Type == "sqlite" {
logger.Infof("[Database] 使用 sqlite path=%s", dbCfg.Path)
} else {
logger.Infof("[Database] 使用 %s host=%s port=%d user=%s dbname=%s",
dbCfg.Type, dbCfg.Host, dbCfg.Port, dbCfg.User, dbCfg.DBName)
}
if err := database.Init(dbCfg); err != nil { if err := database.Init(dbCfg); err != nil {
logger.Errorf("Failed to init database: %v", err)
logger.Errorf("排查建议: 1) 确认 BH_DB_* 环境变量已注入 2) MySQL 是否允许 host.docker.internal 访问 3) configs/config.ini 是否覆盖了错误配置")
logger.Fatalf("Failed to init database: %v", err) logger.Fatalf("Failed to init database: %v", err)
} }
+15 -13
View File
@@ -1,27 +1,29 @@
[supervisord] [supervisord]
nodaemon=true nodaemon=true
logfile=/app/logs/supervisord.log logfile=/dev/null
pidfile=/var/run/supervisord.pid pidfile=/var/run/supervisord.pid
user=root user=root
loglevel=info
[program:backend] [program:backend]
command=/app/taskpool server command=/bin/sh /app/start-backend.sh
directory=/app directory=/app
autostart=true autostart=true
autorestart=true autorestart=true
startsecs=3 startsecs=2
startretries=10 startretries=20
stderr_logfile=/app/logs/backend.err.log # 关键:把 backend 日志打到 docker logs,而不是只写文件
stdout_logfile=/app/logs/backend.out.log stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=10MB stdout_logfile_maxbytes=0
stderr_logfile_maxbytes=10MB stderr_logfile=/dev/stderr
# 不写死 BH_DB_*,避免覆盖 compose 注入的 MySQL/Postgres。 stderr_logfile_maxbytes=0
# 仅在 compose 未设置时提供默认监听参数。 # 不在此写 environment=,完整继承 compose/container 环境变量
environment=BH_SERVER_PORT="8052",BH_SERVER_HOST="0.0.0.0"
[program:nginx] [program:nginx]
command=nginx -g "daemon off;" command=nginx -g "daemon off;"
autostart=true autostart=true
autorestart=true autorestart=true
stderr_logfile=/app/logs/nginx.err.log stdout_logfile=/dev/stdout
stdout_logfile=/app/logs/nginx.out.log stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0