使用docker start命令无法让Exited(0)状态容器转为Up状态问题咨询
原因分析
- 容器生命周期与主进程绑定:从操作日志可看到
eloquent_hamilton容器的默认启动命令为cat /tmp/hello.txt,该命令仅执行单次文件输出操作,执行完成后主进程正常终止,容器会随主进程退出进入Exited(0)状态,属于正常运行表现,无异常报错。 - 交互参数不改变主进程逻辑:
-i参数仅开启交互模式,不会修改默认启动命令的执行逻辑,cat命令输出完成后依然会退出,因此容器无法保持运行。
解决方案
根据你的使用场景可以选择对应方案:
场景1:需要容器长期保持Up状态
临时方案
删除原有容器后,重新运行时覆盖默认启动命令,使用常驻前台的占位进程:
# 删除已退出的旧容器 docker rm eloquent_hamilton # 启动容器并使用tail命令作为前台常驻进程 docker run -d --name eloquent_hamilton forcattranslator/hello tail -f /dev/null
启动后容器会一直保持运行状态,需要进入容器内部操作时执行:
docker exec -it eloquent_hamilton bash
永久方案
修改forcattranslator/hello镜像的Dockerfile,将CMD或ENTRYPOINT指令调整为你需要长期运行的服务进程,替换当前单次执行的cat命令,重新构建镜像后启动的容器即可自动保持运行。
场景2:仅需要每次启动时输出hello docker
当前表现完全符合预期,无需额外调整,每次需要查看输出时执行docker start -i eloquent_hamilton即可看到打印内容。
补充说明:你日志中保持Up状态的
docker-julia_julia_1容器,就是因为其主进程为julia服务,会持续前台运行,因此容器不会主动退出。
内容的提问来源于stack exchange,提问作者ten
相关产品推荐
相关产品推荐

