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 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
|
||||||
|
|||||||
@@ -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,
|
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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user