首页 > 解决方案 > docker ubuntu 容器执行 bash 问题

问题描述

我拉并运行一个图像

docker run -d --name=lemp \
  -v /Users/bappa/Desktop/server/www:/var/www/ \
  -p 8080:80 \
  stenote/docker-lemp:16.04

然后去 bash like

docker exec -it lemp bash

这绝对没问题。但是当我用ubuntu:16.04图像做同样的事情时。我发现如下回复 在此处输入图像描述 问题出在哪里?为什么容器退出?谢谢。

标签: dockerubuntuubuntu-16.04

解决方案


导致不同行为的原因是因为它们的 Dockerfile CMD 或 ENTRYPOINT。

一旦主进程(CMD 或 ENTRYPOINT)完成,docker 容器就会停止。

如果您查看docker-lemp Dockerfile

ENTRYPOINT ["/entrypoint.sh"]

Ubuntu Dockerfile相比:

CMD ["bash"]

docker-lemp 运行 entrypoint.sh,它运行进一步的进程,而 Ubuntu 运行 bash,它在完成后自行退出。

如果您想将 Ubuntu 保留在后台,一个简单的技巧是:

docker container run -d ubuntu:16.04 tail -f /dev/null

这会将默认 CMD bash替换为tail -f /dev/null,因此容器不会退出。


推荐阅读