ECS部署的“本地好了,线上还是旧的”困局
本地改了合规拦截逻辑,测试通过,部署到线上发现还是旧的——排查了两小时,发现代码没push。更惨的是,改了ECS上的文件忘了同步回Git,下次部署直接冲突。
核心问题:本地和线上不一致
这是个人项目部署中最常见的问题。表现为:
| 现象 | 根本原因 |
|---|---|
| 合规拦截本地1次、线上2次 | 修复代码没commit/push,ECS仍是旧代码 |
| RF v2.2已训练,线上像旧模型 | GitHub有代码,ECS没pull + 没--build |
| 改了ECS上的文件,本地没有 | 在服务器上手改文件,没同步回Git |
正确部署流程
本地改完代码 → git push → ECS上git pull → docker compose up --build -d --force-recreate
关键点: 不要只用docker compose restart——它不会更新镜像里的代码和前端打包。
如果git pull冲突了
# 报错:Your local changes would be overwritten by merge
# 原因:之前在ECS上手改了文件
# 如果GitHub已是正确版本,直接丢弃本地改动
git checkout -- docker-compose.yml
git checkout -- Dockerfile
git checkout -- vite.config.ts
git pull
两个常见的错误习惯
-
习惯一:在ECS上用vim改文件 → 改完没同步回Git,下次pull直接冲突。正确做法:本地改、本地测、push、ECS pull。
-
习惯二:只重启容器不重新构建 →
docker compose restart不会更新镜像。如果改了代码,需要用up --build。
GitHub在ECS上pull失败
Failed to connect to github.com port 443: Connection timed out
解决方案:
-
换镜像源再pull
-
或本地
git archive打包上传到ECS
踩坑总结
代码的唯一来源应该是Git仓库。 ECS上的任何改动都应该先回到本地,走完整的push-pull-build流程。在ECS上手改文件,迟早会出问题。

浙公网安备 33010602011771号