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

问题描述 投票:5回答:1

相关

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

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

docker
1个回答
3
投票

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

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

$ docker create --name thedate debian date

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

为了明确,你的docker run命令有标志-dit:detached,interactive(connect STDIN)和tty都被启用。

如果你想要创建和启动类似的方法,那么你需要为创建的容器分配一个tty

$ docker create -it --name ashell debian

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

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

注意:[2018年1月25日]编辑在-i上添加create标志作为评论者注意到,由于最初编写这不起作用,因为容器元数据在创建阶段没有连接stdin

© www.soinside.com 2019 - 2024. All rights reserved.