这是我的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!"]
它开始时没有任何问题-为什么?
答案 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"]