Docker容器最初已退出

时间:2018-08-13 11:46:02

标签: docker

这是我的Dockerfile:

# comment
FROM sonatype/nexus3
COPY ./script.sh /bin/
CMD ["echo", "Image has been created!"]

然后我创建图像:

docker build -t test:latest ./

运行容器:

docker run -d --name testcontainer test:latest

当我想查看所有容器的列表时,会显示给我:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMES
4d7510a5938b        test:latest         "echo 'Image has bee..."   2 seconds ago       Exited (0) 1 second ago                       testcontainer

为什么运行后进入退出状态?当我发表评论时,有趣的是:

#CMD ["echo", "Image has been created!"]

它开始时没有任何问题-为什么?

2 个答案:

答案 0 :(得分:1)

'CMD'指示Docker将参数设置为容器在运行时将执行的默认命令。在构建过程中不会显示任何内容。

您在CMD中给出的命令会执行您在运行容器时所要求的-并立即退出。

如果您未在Dockerfile中提供CMD,则将使用原始映像(FROM)中的CMD。那可能会运行保留在内存中并且不会退出的内容,这就是它“起作用”的原因。

答案 1 :(得分:0)

Docker容器将继续运行,直到其命令完成或停止为止。 考虑到这一点,您可以使用以下命令使容器永久运行:

docker run -d ubuntu tail -F nothing

在这里,我们要求容器显示添加到文件nothing中的不存在的任何内容。 因此该容器将一直运行,除非我们停止它。 但是您为容器设置的命令是echo something,则该命令成功运行后,容器将停止。 如果执行此操作:

docker logs your_container_name

您将看到容器已响应您的要求,然后退出。 如果您希望容器永久运行,请替换此行:

CMD ["echo", "Image has been created!"]

具有:

CMD ["tail", "-F", "nothing"]