You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins部署Docker容器至EC2后无运行容器问题排查

问题分析与解决方案

核心问题:容器前台运行导致SSH会话断开后被终止

你的Jenkins流水线执行docker run命令时未添加-d参数,容器会以前台模式运行。当Jenkins通过SSH完成命令执行并断开连接时,前台运行的容器进程会被系统终止,因此EC2实例上看不到运行的容器,自然无法访问5000端口的Flask应用。

额外问题:无效的docker logout操作

流水线post阶段的sh 'docker logout'是在Jenkins代理节点上执行的,而非目标EC2实例,这个操作对部署无实际作用,可直接移除。

修复步骤

  1. 修改Jenkinsfile中的docker run命令,添加-d参数让容器后台运行:
sh "ssh -o StrictHostKeyChecking=no -i \${awsPrivateKey} \${awsUsername}@<ec2-instance-public-ip> \
docker image ls && \
docker ps -a && \
docker system prune -af && \
docker ps -a && \
docker pull alexxy21/flask-todo-app:latest && \
docker image ls && \
docker run -d -p 5000:5000 alexxy21/flask-todo-app:latest && \
docker ps"
  1. (可选)验证容器启动状态:
    • 可在docker run后追加docker logs $(docker ps -q)命令,查看Flask应用启动日志,确认应用是否绑定了0.0.0.0(若仅绑定127.0.0.1,即使端口映射正常,外部也无法访问)。
  2. 移除无效的docker logout操作:
post {
    success {
        echo 'Build succeeded!'
    }
    failure {
        echo 'Build failed!'
    }
}

补充验证点

  • 检查EC2实例的Docker服务状态:执行systemctl status docker确认服务正常运行。
  • 若添加-d后仍无法访问,执行docker logs <容器ID>查看应用是否有启动报错。

内容的提问来源于stack exchange,提问作者rajeev mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 19:32:33