使用Github Actions部署至EC2后,Docker容器代码未更新问题
问题排查与解决
核心问题分析
虽然Github Actions执行成功、Docker镜像/容器已创建,但应用返回旧代码结果,大概率是部署流程未拉取最新代码,或Docker构建时使用了旧文件。结合配置和Dockerfile异常提示,具体修复方案如下:
1. 修复Git拉取逻辑的问题
当前部署脚本每次执行git clone,若EC2服务器上已存在actions文件夹,这一步会直接失败,后续Docker构建/启动步骤不会执行,导致依然运行旧容器。
修改部署脚本,替换git clone为拉取最新代码的逻辑:
# 替换原SSH and Deploy步骤里的git相关命令 ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa ubuntu@"${{secrets.EC2_PUBLIC_DNS}}" << EOF # 文件夹不存在则克隆,否则拉取最新代码 if [ ! -d "actions" ]; then git clone https://${{ secrets.REPO_CLONE_ACCESS_TOKEN }}@github.com/mahesh-jackett/actions.git else cd actions && git pull origin main fi cd actions docker stop fastapi_container || true docker rm fastapi_container || true docker build -t fastapi_image . docker run -d --name fastapi_container -p 8000:8000 fastapi_image EOF
- 增加
|| true是为了避免容器不存在时stop/rm命令报错中断流程。
2. 修复Dockerfile异常问题
你提供的Dockerfile仅5行,但截图显示第77行存在异常,说明EC2服务器上actions文件夹内的Dockerfile不是最新版本(可能是旧文件残留)。
解决方法:
- 执行上述修改后的脚本,通过
git pull拉取最新的Dockerfile; - 若拉取后仍有问题,手动登录EC2服务器,进入
actions目录,查看Dockerfile内容,删除多余的无效行(第77行相关错误内容),确保Dockerfile与你提供的一致。
3. 验证部署有效性
部署完成后,登录EC2服务器执行以下命令确认:
- 进入
actions目录,查看main.py内容:cat main.py,确认是否为最新的{"Hello": "Show This"}; - 查看Docker构建日志:
docker build -t fastapi_image .,检查是否有报错; - 查看容器运行日志:
docker logs fastapi_container,确认应用是否正常启动且加载了最新代码。
内容的提问来源于stack exchange,提问作者Deshwal
相关产品推荐
相关产品推荐

