这是当Docker容器正常退出并且您可以编辑Dockerfile时的解决方案。
通常,当运行Docker容器时,通过运行命令为应用程序提供服务。从Dockerfile参考中,
CMD和ENTRYPOINT指令均定义运行容器时执行的命令。... Dockerfile应该至少指定CMD或ENTRYPOINT命令之一。
当您生成映像并且未使用CMD或ENTRYPOINT指定任何命令时,将执行基本映像的CMD或ENTRYPOINT命令。
例如,官方的Ubuntu Dockerfile具有CMD ["/bin/bash"]
(https://hub.docker.com/_/ubuntu)。现在,bin/bash/
命令可以接受输入,并且docker run -it IMAGE_ID
命令将STDIN附加到容器。结果是您得到一个交互式终端,并且容器继续运行。
在Dockerfile中指定带有CMD或ENTRYPOINT的命令时,运行容器时将执行此命令。现在,如果此命令可以完成而无需任何输入,它将完成并且容器将退出。在这种情况下docker run -it IMAGE_ID
将不会提供交互式终端。一个示例是从下面的Dockerfile构建的Docker映像-
FROM ubuntu
ENTRYPOINT echo hello
如果需要转到该映像的终端,则需要通过修改entrypoint命令来保持容器运行。
FROM ubuntu
ENTRYPOINT echo hello && sleep infinity
使用正常运行容器后docker run IMAGE_ID
,您可以转到另一个终端并使用docker exec -it CONTAINER_ID bash
来获取容器的终端。