根据我到目前为止阅读的教程,使用" docker run -d"将从图像启动一个容器,容器将在后台运行.这就是它的样子,我们可以看到我们已经有了容器ID.
root@docker:/home/root# docker run -d centos
605e3928cdddb844526bab691af51d0c9262e0a1fc3d41de3f59be1a58e1bd1d
Run Code Online (Sandbox Code Playgroud)
但如果我跑" docker ps",则没有任何回复.
所以我试过" docker ps -a",我可以看到容器已经退出:
root@docker:/home/root# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
605e3928cddd centos:latest "/bin/bash" 31 minutes ago Exited (0) 31 minutes ago kickass_swartz
Run Code Online (Sandbox Code Playgroud)
我做错了什么?我该如何解决这个问题?
我已经看过一堆教程似乎做了我想做的事情,但出于某种原因,我的Docker容器退出了.基本上,我在Docker容器中设置了一个Web服务器和几个守护进程.我通过一个名为bash的脚本完成了最后的部分run-all.sh,我在Dockerfile中运行CMD.run-all.sh看起来像这样:
service supervisor start
service nginx start
Run Code Online (Sandbox Code Playgroud)
我在Dockerfile中启动它,如下所示:
CMD ["sh", "/root/credentialize_and_run.sh"]
Run Code Online (Sandbox Code Playgroud)
我可以看到,当我手动运行时(即使用-i -t/bin/bash访问图像),服务都能正常启动,并且当我运行图像时,一切看起来都正常运行,但它会退出一次它完成了我的流程.我希望这些进程无限期地运行,据我所知,容器必须继续运行才能实现.然而,当我跑步时docker ps -a,我看到:
? docker_test docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7706edc4189 some_name/some_repo:blah "sh /root/run-all.sh 8 minutes ago Exited (0) 8 minutes ago grave_jones
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?为什么要退出?我知道我可以在我的bash脚本末尾添加一个while循环来保持它,但是什么是阻止它退出的正确方法?
这个问题的答案不起作用.
在我可以attach或不接受-t标志之前,docker容器总是退出.我可以列出我尝试过的所有命令,但它是start exec attach各种-it标志和组合/bin/bash.
如何将现有容器启动到bash中?为什么这么难?这是Docker的"不正当"使用吗?
编辑:我创建了容器docker run ubuntu.有关容器的信息:60b93bda690f ubuntu "/bin/bash" About an hour ago Exited (0) 50 minutes ago ecstatic_euclid
我正在使用tail -f/dev/null命令来保持容器.
该行本身放在一个前后有回声的脚本中.尾部-f/dev/null下的echo 预计是无法访问的,但出于某种原因我在日志中看到它.
一旦出现问题,每次重启容器都会导致容器启动并完成.只有rm和rebuild解决了这个问题.
我不确定它是否已连接,但我注意到在很短的时间内停止和启动计算机的一个问题帮助我重现了这个问题.
在什么情况下tail -f/dev/null可以继续下一行?
基本映像: ubuntu 64x,14.0.4
计算机操作系统: ubuntu 64x,14.0.4