如何启动已停止的Docker容器并进入交互式终端?
问题原因
容器的生命周期和它启动时执行的初始命令绑定:当这个命令执行完成(退出),容器就会停止。
- 你用
docker run -it <image_name>时,默认会启动一个交互式shell(比如/bin/bash或sh),这个shell会一直运行直到你手动退出,所以容器能保持活跃。 - 但如果你的已停止容器当初创建时的初始命令不是交互式shell(比如是一次性脚本、echo命令等),那用
docker start -ia <container_name>启动时,它还是会执行这个一次性命令,命令结束后容器立刻停止。
解决方案
根据你复用容器作为沙箱/开发环境的需求,提供两种可行方案:
方案1:适配已停止的容器
- 先查看容器原来的启动命令,确认是否为一次性命令:
docker inspect <container_name> --format '{{.Config.Cmd}}' - 将已停止的容器打包为新镜像,再用新镜像启动交互式容器:
新容器启动后会进入交互式shell,退出后容器停止,下次直接用# 提交容器为新镜像 docker commit <container_name> my-dev-image # 用新镜像启动交互式容器 docker run -it --name my-dev-container my-dev-imagedocker start -ia my-dev-container就能重新进入。
方案2:创建可复用的开发容器(推荐)
直接在创建容器时指定交互式shell作为启动行为,确保容器能持续运行方便复用:
# 创建并后台启动交互式容器 docker run -itd --name my-dev-sandbox <image_name>
- 需要进入容器时执行:
docker exec -it my-dev-sandbox /bin/bash - 退出容器时用
exit,容器会继续在后台运行,下次直接用上述exec命令进入即可。
如果镜像默认没有bash,可替换为sh:
docker exec -it my-dev-sandbox /bin/sh
内容的提问来源于stack exchange,提问作者Kevin Shu
相关产品推荐
相关产品推荐

