diff --git a/Dockerfile b/Dockerfile index c19a3f8..adae39c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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\ "] diff --git a/par-api/Dockerfile b/par-api/Dockerfile index d7effae..b260c7e 100644 --- a/par-api/Dockerfile +++ b/par-api/Dockerfile @@ -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\ "]