fix: ENTRYPOINT 兼容 DB_* 和 MYSQL_* 两种变量命名,修复 MySQL 连接失败

This commit is contained in:
mediabot-pt
2026-06-29 13:08:11 +08:00
parent 0e74734636
commit 03bcf974b1
2 changed files with 42 additions and 22 deletions

View File

@@ -44,16 +44,26 @@ EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=3 \
CMD wget -qO- http://localhost:8080/health || exit 1
# 启动入口(参考 mediabot:支持环境变量动态构造数据源 URL,便于不同环境切换)
# 启动入口(兼容 DB_* 和 MYSQL_* 两种变量命名风格)
# Spring Boot 会优先读取 SPRING_DATASOURCE_* 环境变量,覆盖 application.yml 配置
ENTRYPOINT ["sh", "-c", "\
if [ -z \"$SPRING_DATASOURCE_URL\" ]; then \
export SPRING_DATASOURCE_URL=\"jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DB}?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8\"; \
fi; \
if [ -n \"$MYSQL_USER\" ]; then \
export SPRING_DATASOURCE_USERNAME=\"$MYSQL_USER\"; \
fi; \
if [ -n \"$MYSQL_PASSWORD\" ]; then \
export SPRING_DATASOURCE_PASSWORD=\"$MYSQL_PASSWORD\"; \
fi; \
java $JAVA_OPTS -jar app.jar \
# 如果未设置完整的 SPRING_DATASOURCE_URL,则从环境变量构造\n\
if [ -z \"$SPRING_DATASOURCE_URL\" ]; then \n\
HOST=\"${MYSQL_HOST:-${DB_HOST:-localhost}}\"; \n\
PORT=\"${MYSQL_PORT:-${DB_PORT:-3306}}\"; \n\
DB=\"${MYSQL_DB:-${DB_NAME:-par_registry}}\"; \n\
export SPRING_DATASOURCE_URL=\"jdbc:mysql://${HOST}:${PORT}/${DB}?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8\"; \n\
fi; \n\
# 用户名密码:MYSQL_* 优先,DB_* 作为备选\n\
if [ -z \"$SPRING_DATASOURCE_USERNAME\" ]; then \n\
export SPRING_DATASOURCE_USERNAME=\"${MYSQL_USER:-${DB_USERNAME:-root}}\"; \n\
fi; \n\
if [ -z \"$SPRING_DATASOURCE_PASSWORD\" ]; then \n\
export SPRING_DATASOURCE_PASSWORD=\"${MYSQL_PASSWORD:-${DB_PASSWORD:-}}\"; \n\
fi; \n\
# 兼容 JWT_SECRET 和 HMAC_SECRET 两种命名\n\
if [ -z \"$HMAC_SECRET\" ] && [ -n \"$JWT_SECRET\" ]; then \n\
export HMAC_SECRET=\"$JWT_SECRET\"; \n\
fi; \n\
java $JAVA_OPTS -jar app.jar \n\
"]

View File

@@ -84,16 +84,26 @@ EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=3 \
CMD wget -qO- http://localhost:8080/health || exit 1
# 启动入口(参考 mediabot:支持环境变量动态构造数据源 URL,便于不同环境切换)
# 启动入口(兼容 DB_* 和 MYSQL_* 两种变量命名风格)
# Spring Boot 会优先读取 SPRING_DATASOURCE_* 环境变量,覆盖 application.yml 配置
ENTRYPOINT ["sh", "-c", "\
if [ -z \"$SPRING_DATASOURCE_URL\" ]; then \
export SPRING_DATASOURCE_URL=\"jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DB}?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8\"; \
fi; \
if [ -n \"$MYSQL_USER\" ]; then \
export SPRING_DATASOURCE_USERNAME=\"$MYSQL_USER\"; \
fi; \
if [ -n \"$MYSQL_PASSWORD\" ]; then \
export SPRING_DATASOURCE_PASSWORD=\"$MYSQL_PASSWORD\"; \
fi; \
java $JAVA_OPTS -jar app.jar \
# 如果未设置完整的 SPRING_DATASOURCE_URL,则从环境变量构造\n\
if [ -z \"$SPRING_DATASOURCE_URL\" ]; then \n\
HOST=\"${MYSQL_HOST:-${DB_HOST:-localhost}}\"; \n\
PORT=\"${MYSQL_PORT:-${DB_PORT:-3306}}\"; \n\
DB=\"${MYSQL_DB:-${DB_NAME:-par_registry}}\"; \n\
export SPRING_DATASOURCE_URL=\"jdbc:mysql://${HOST}:${PORT}/${DB}?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8\"; \n\
fi; \n\
# 用户名密码:MYSQL_* 优先,DB_* 作为备选\n\
if [ -z \"$SPRING_DATASOURCE_USERNAME\" ]; then \n\
export SPRING_DATASOURCE_USERNAME=\"${MYSQL_USER:-${DB_USERNAME:-root}}\"; \n\
fi; \n\
if [ -z \"$SPRING_DATASOURCE_PASSWORD\" ]; then \n\
export SPRING_DATASOURCE_PASSWORD=\"${MYSQL_PASSWORD:-${DB_PASSWORD:-}}\"; \n\
fi; \n\
# 兼容 JWT_SECRET 和 HMAC_SECRET 两种命名\n\
if [ -z \"$HMAC_SECRET\" ] && [ -n \"$JWT_SECRET\" ]; then \n\
export HMAC_SECRET=\"$JWT_SECRET\"; \n\
fi; \n\
java $JAVA_OPTS -jar app.jar \n\
"]