fix(docker): surface backend crash logs in docker logs and print DB target
Build and Deploy / build-and-push (push) Successful in 52s
Build and Deploy / build-and-push (push) Successful in 52s
This commit is contained in:
@@ -29,13 +29,15 @@ COPY --from=backend-builder /taskpool /app/taskpool
|
||||
# Copy nginx config (modified for localhost)
|
||||
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 docker/start-backend.sh /app/start-backend.sh
|
||||
|
||||
# Create data directories and ship example config (used when no volume config)
|
||||
COPY configs/config.example.ini /app/configs/config.example.ini
|
||||
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
|
||||
EXPOSE 3000 8052
|
||||
|
||||
@@ -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
|
||||
@@ -133,7 +133,17 @@ func (a *App) initDatabase() {
|
||||
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 {
|
||||
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)
|
||||
}
|
||||
|
||||
|
||||
+15
-13
@@ -1,27 +1,29 @@
|
||||
[supervisord]
|
||||
nodaemon=true
|
||||
logfile=/app/logs/supervisord.log
|
||||
logfile=/dev/null
|
||||
pidfile=/var/run/supervisord.pid
|
||||
user=root
|
||||
loglevel=info
|
||||
|
||||
[program:backend]
|
||||
command=/app/taskpool server
|
||||
command=/bin/sh /app/start-backend.sh
|
||||
directory=/app
|
||||
autostart=true
|
||||
autorestart=true
|
||||
startsecs=3
|
||||
startretries=10
|
||||
stderr_logfile=/app/logs/backend.err.log
|
||||
stdout_logfile=/app/logs/backend.out.log
|
||||
stdout_logfile_maxbytes=10MB
|
||||
stderr_logfile_maxbytes=10MB
|
||||
# 不写死 BH_DB_*,避免覆盖 compose 注入的 MySQL/Postgres。
|
||||
# 仅在 compose 未设置时提供默认监听参数。
|
||||
environment=BH_SERVER_PORT="8052",BH_SERVER_HOST="0.0.0.0"
|
||||
startsecs=2
|
||||
startretries=20
|
||||
# 关键:把 backend 日志打到 docker logs,而不是只写文件
|
||||
stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
# 不在此写 environment=,完整继承 compose/container 环境变量
|
||||
|
||||
[program:nginx]
|
||||
command=nginx -g "daemon off;"
|
||||
autostart=true
|
||||
autorestart=true
|
||||
stderr_logfile=/app/logs/nginx.err.log
|
||||
stdout_logfile=/app/logs/nginx.out.log
|
||||
stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
|
||||
Reference in New Issue
Block a user