Open chajiuqqq opened 3 months ago
https://devopscube.com/keep-docker-container-running/
需要构建编译环境的镜像,但是直接docker build会出现很多错误,不好debug。于是构建一个基础镜像,然后exec进去尝试好再写dockerfile,发现基础镜像run之后会立刻退出Exited(0),于是寻找debug方法。
docker run -it --name tty-container ubuntu /bin/bash
此时exit的话,容器直接停止了
注意,如果镜像指定了CMD或者ENTRYPOINT,容器会在执行完该命令后退出,无法持续running,可以用方法3替换。
此时exit的话,容器还是running,可以多次exec进去
docker run -it -d --name tty-container ubuntu /bin/bash docker exec -it tty-container /bin/bash
注意,必须加-it,不然没有持续运行的进程,就直接退出了。
docker run -d ubuntu tail -f /dev/null
sleep infinity也可以让容器running,再exec进去
docker run -d ubuntu sleep infinity
ENTRYPOINT ["tail", "-f", "/dev/null"]
https://devopscube.com/keep-docker-container-running/
背景
需要构建编译环境的镜像,但是直接docker build会出现很多错误,不好debug。于是构建一个基础镜像,然后exec进去尝试好再写dockerfile,发现基础镜像run之后会立刻退出Exited(0),于是寻找debug方法。
方法1:直接在没有ENTRYPOINT的容器打开一个交互tty
此时exit的话,容器直接停止了
注意,如果镜像指定了CMD或者ENTRYPOINT,容器会在执行完该命令后退出,无法持续running,可以用方法3替换。
方法2:让容器在后台keep running,然后exec进去
此时exit的话,容器还是running,可以多次exec进去
注意,必须加-it,不然没有持续运行的进程,就直接退出了。
方法3:在run的最后添加tail命令让容器running
方法4:sleep infinity命令
sleep infinity也可以让容器running,再exec进去
方法5:把能持续运行的命令加到dockerfile的ENTRYPOINT中