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

如何让Docker或Podman重启已停止容器时重新执行原有CMD

问题根因
  • 你观察到的「CMD未重新执行」是误解,本质是date命令属于单次执行的短生命周期进程:命令执行完成后主进程直接退出,容器随之进入Exited停止状态,从docker ps/podman ps的运行中容器列表里看不到,很容易误以为CMD没有触发。
  • 验证方法:执行容器重启命令后,运行docker logs <容器ID> 或 podman logs <容器ID>,可以看到每次重启都会输出新的时间戳,证明CMD每次重启都正常执行。
适配调整方案

根据你的实际需求选择对应方案即可:

方案1:仅需要确保重启时CMD正常触发

无需修改Dockerfile,首次启动容器时添加自动重启策略即可,容器每次执行完date退出后会自动重启,循环执行CMD:

# Docker 环境
docker run --restart=always <你的镜像名称>
# Podman 环境
podman run --restart=always <你的镜像名称>

每次执行结果可以通过上述logs命令查看。

方案2:需要容器执行CMD后保持运行状态

如果你的业务需要容器执行完自定义命令后不退出、保持运行状态,可以修改Dockerfile的CMD指令,在执行完你的业务命令后启动一个常驻前台进程:

FROM alpine
CMD ["sh", "-c", "date; tail -f /dev/null"]

如果有更复杂的执行逻辑,可以把逻辑写入shell脚本,设置为容器主进程启动即可,只要主进程不退出,容器就会保持运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 10:54:04