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