fix(infra): web 容器运行时覆盖 nginx 配置,防止环境错配 #1645
Reference in New Issue
Block a user
Delete Branch "fix/nginx-staging-runtime-override"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
staging web 容器 nginx upstream 指向
xiaoxia-api-production,原因是镜像被 skip 构建后 retag 了旧镜像(内含 production 默认配置)。staging 容器在xiaoxia-net-staging网络无法解析 production 容器名 → DNS 失败 → nginx 崩溃重启 → 502。修复
compose.yml 为 web 服务添加 volume mount,运行时将正确环境的 nginx 配置挂载到
/etc/nginx/conf.d/default.conf,覆盖镜像内的默认配置:./nginx-staging.conf→xiaoxia-api-staging:8000./nginx-production.conf→xiaoxia-api-production:8000变更文件
infra/docker/compose.yml:web 服务添加volumes和environment注意
/etc/nginx/conf.d/default.conf),不挂载/usr/share/nginx/htmlnginx-staging.conf/nginx-production.conf文件存在于 compose.yml 同级目录nginx-staging.conf已存在于仓库中【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
volumes配置使用了变量插值./nginx-${ENV:-staging}.conf。如果宿主机上不存在对应的配置文件(例如当ENV=production但目录下只有nginx-staging.conf时),Docker 守护进程将拒绝启动容器,导致服务不可用。代码中未包含对文件存在性的校验机制。💡 改进建议(不阻塞合并)
NGINX_ENV。标准的 Nginx Docker 镜像(官方 nginx:alpine 等)并不会自动读取此变量来改变 Nginx 的运行配置。请确认当前使用的镜像是否包含自定义的 entrypoint 脚本来处理此变量;如果是标准镜像,该行代码无效,建议移除以免造成误导。✅ 良好实践
:ro标志以只读模式挂载配置文件,符合最小权限原则。${ENV:-staging}设置了合理的默认值,避免了变量未定义时的空指针风险。/usr/share/nginx/html的重要性,有助于维护。🤖 由 AI 代码审查机器人自动生成 | 2026-09-03 07:21:56 | 模型:
🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
🗑️ 预览环境已清理
PR #1645 已关闭或合并,对应的预览环境已被清理。