我在交互模式下使用docker run
命令下载了busybox的docker镜像并为其创建了一个容器。
退出容器后,我再次尝试run
命令,没有交互模式,从本地仓库中已存在的图像创建另一个busybox容器。通过ps
检查活动容器列表时,我看不到任何新容器正在运行,但在所有容器ps -a
的列表中,我看到新容器已创建并已退出(0)。
虽然我可以通过其start
非活动容器,但我想知道为什么run
命令在创建后退出容器。
答案 0 :(得分:2)
这是非交互式使用busybox
的预期行为。这是因为busybox
图片只运行sh
。
要看到这一点,请查看Dockerfile:
FROM scratch
ADD busybox.tar.xz /
CMD ["sh"]
只要容器中运行的进程终止,Docker容器就会停止。因此,当您以非交互方式启动busybox
时,shell将退出,因此容器将终止。
如果您的Docker镜像的进程能够以非交互方式运行,则可以使用-d
使容器在非交互模式下保持活动状态。 (如果失败了,我建议您查看docker logs [containername]
,看看幕后发生了什么。)
例如,这将无限期地以非交互方式运行:docker run -d --rm busybox sh -c "while :; do sleep 500; done"