fix(web, P0): nginx entrypoint 在 CI bind mount 场景不应 rm default.conf(staging 502 阻塞部署) #1856
Reference in New Issue
Block a user
Delete Branch "fix/nginx-entrypoint-bind-mount"
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 部署(Run #49298、#49301)连续失败:
rm: can't remove '/etc/nginx/conf.d/default.conf': Resource busy29ca51da(#1853 引入的版本,本身ln -sf有 busybox 问题)→ web 无限重启 → staging 永久 502根因
PR #1853 把 nginx 配置烤入镜像并通过
nginx-entrypoint.sh按 APP_ENV 切换 symlink,但忽略了 CI 部署脚本的实际行为:scripts/ci_staging_deploy.sh:519和scripts/ci_production_deploy.sh:436:CI 部署时宿主机生成的 nginx 配置(含 resolver/docker upstream 代理)以 readonly bind mount 挂到容器内
/etc/nginx/conf.d/default.conf。容器启动后 entrypoint:ln -sf→ busybox 在 target 为普通文件时会在 target 目录下创建子链接,nginx 读不到正确配置rm -f再ln -s→ 对 readonly bind mount 的文件rm返回 EBUSY ("Resource busy"),set -e直接退出,nginx 根本没启动两次"修复"都没命中真正原因:CI 部署路径下 default.conf 是外部注入的,entrypoint 不应动它。
修复
重写
infra/docker/nginx-entrypoint.sh,分三种场景:|| true吞错跳过 ln验证
本地模拟两种场景:
影响
🚀 预览环境已部署
🗑️ 预览环境已清理
PR #1856 已关闭或合并,对应的预览环境已被清理。