原因:因為像centos、ubuntu等這些系統鏡像起的容器都會啟動時執行bash這個命令,進入后台運行,被daokcer認為是不活躍的容器進程,就會關閉容器,這樣我們docker ps的時候就會發現容器沒有起來。
刨析:
我們以制作鏡像的角度解釋為什么起容器的時候會執行bash這個命令
制作鏡像的時候都會需要一個Dockerfile文件
這是Dockerfile文件內容
#base鏡像
FROM busybox
#設置環境變量
ENV sg WANG
#啟動容器時執行的命令我們,首先執行/bin/sh這個解釋器,再sleep 120秒
CMD ["/bin/sh", "-c", "echo wangwenlong;sleep 120;echo ok"]
生成一個基於base鏡像busybox的鏡像
[root@localhost busybox]# docker build -t busybox .
創建並運行一個容器
[root@localhost busybox]# docker run -d --name w-busybox busybox
查看該容器是否運行
[root@localhost busybox]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
596f2753e6b5 busybox "/bin/sh -c 'echo wa…" 2 seconds ago Up 1 second w-busybox
查看該容器中運行的進程
[root@localhost busybox]# docker top w-busybox
UID PID PPID C STIME TTY TIME CMD
root 10382 10363 1 18:09 ? 00:00:00 /bin/sh -c echo wangwenlong;sleep 120;echo ok
root 10412 10382 0 18:09 ? 00:00:00 sleep 120
120秒后
再次查看該容器會發現該容器已經停止運行
[root@localhost busybox]# docker top w-busybox
Error response from daemon: Container 596f2753e6b500ce05638995af11c8aae6151615f9a70c2fbbbc79a43c47c3f6 is not running
以上內容都說明了如果build的那個鏡像的Dockerfile文件有
CMD ["解釋器"]
一般都是linux系統作為鏡像的時候會有上面這個
我們就要使用以下進行創建運行容器的命令
[root@localhost busybox]# docker run -it
該容器便可以運行起來而不會被docker關閉,因為bash模式下會進入后台運行,docker認為這是個不活躍的容器進程,就會關閉該容器