docker run vs create + start:为什么创建的容器不同?

时间:2017-08-19 12:50:30

标签: docker

相关

docker container started in Detached mode stopped after process execution

https://serverfault.com/questions/661909/the-right-way-to-keep-docker-container-started-when-it-used-for-periodic-tasks

我理解docker runcreate + start之间的区别,但不了解以这两种方式创建的实际容器有何不同。

假设我使用

创建并运行容器
docker run -dit debian:testing-slim

然后停止它。稍后可以使用

启动创建的容器
docker start silly_docker_name

并且它将在后台运行,因为图像的输入命令是bash。

但是首次创建容器时

docker create --name silly_name debian:testing-slim

然后以

开头
docker start silly_name

然后它会立即退出。为什么没有开始,或者在这种情况下它是如何退出的?

1 个答案:

答案 0 :(得分:3)

作为shell的容器进程(如你的debian示例中的bash)的不同之处在于没有执行任何操作而没有终端+交互式“模式”的shell启动。

您可以通过将create'd容器的命令更改为不需要终端的内容来测试:

$ docker create --name thedate debian date

现在,如果我运行thedate容器,每次运行它都会输出日期(在日志中)并退出。 docker logs thedate会显示这一点;每次运行一个条目。

要明确,您的docker run命令包含标记-dit d etached, i nteractive(连接STDIN)和 t ty都已启用。

如果你想用create& amp;开始,然后你需要为创建的容器分配tty

$ docker create -it --name ashell debian

现在,如果我启动它,我会要求以交互方式附加到它,并且我得到与运行相同的行为:

$ docker start -ai ashell root@6e44e2ae8817:/#

注意: [2018年1月25日] 已修改为-i的{​​{1}}标记作为评论者注意到最初写这个不起作用,因为容器元数据没有在创建阶段连接stdin