為什么有些容器在docker run的時候需要接 -it ,有些不需要?


原因:因為像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認為這是個不活躍的容器進程,就會關閉該容器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM