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

Jenkins部署Django应用:Docker构建镜像不启动应用的原因解析

关于Docker构建与容器运行阶段命令执行的疑问解答

为什么构建镜像阶段不启动应用,仅容器运行时启动?

Docker构建镜像的过程,本质是一步步生成只读镜像层:每一条RUN、COPY等指令,都是在一个临时容器里执行操作,执行完成后将容器的文件系统状态打包成镜像层,临时容器随即销毁。

你当前的Dockerfile应该是用CMD或ENTRYPOINT来指定执行runner.sh——这两个指令属于容器启动时的执行指令,构建阶段只会把这些指令的信息记录到镜像的元数据里,不会实际执行脚本。只有当你用docker run启动容器时,Docker才会执行runner.sh里的uwsgi命令,启动应用服务。

之前直接在Dockerfile运行命令导致Jenkins卡住的原因

如果直接在Dockerfile里用RUN uwsgi --http "0.0.0.0:${PORT}" ...,RUN是构建阶段执行的命令,而uwsgi是一个前台运行的服务进程,会一直占用临时容器的运行资源,不会自动退出。Jenkins的流水线构建步骤会一直等待这个RUN指令执行完成,而uwsgi永远不会结束,所以流水线就卡住了。

核心区别总结

  • RUN:构建镜像时执行,执行完就提交镜像层,必须是能退出的命令,不能是持续运行的服务。
  • CMD/ENTRYPOINT:容器启动时执行,用于定义容器运行时的默认进程,适合启动持续运行的应用服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:02:06