溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

docker容器為什么一直running

發(fā)布時間:2021-09-17 12:45:55 來源:億速云 閱讀:560 作者:chen 欄目:建站服務(wù)器

本篇內(nèi)容主要講解“docker容器為什么一直running”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“docker容器為什么一直running”吧!

很多人第一次接觸 docker,都會有個錯覺,認為運行一個 container 就和運行一個虛擬機一樣, docker run 之后,該 container 即一直處于 running 狀態(tài)。其實,這種認識是完全錯誤的。

container 剛起來的時候,用戶可以通過 dockerfile 中的 CMD,ENTRYPOINT,或者直接在 docker run 后面接 comand,來指定 container 啟動時執(zhí)行的程序。

如果指定的程序只是一個短暫的任務(wù),比如 echo sorry。那么,sorry,container 在輸出 “sorry” 之后,就退出了??梢酝ㄟ^ docker inspect 看到,container 狀態(tài)變成了 Exited。一旦進入 Exited 狀態(tài),以下命令將不再 work:

docker exec <container>
docker attach <container>
這兩個命令都需要 <container>處于 running!

官方文檔里有明確指出,docker start <container> 可以重新啟動 <container>,那它又可以轉(zhuǎn)成 running 狀態(tài)。

但是,剛剛 start 的 container 在啟動之后,會再一次執(zhí)行 CMD 的命令。然后,它又很快完成任務(wù),進入 Exited 狀態(tài)休息了。

如果啟動一個 container 之后,想把它當做一個虛擬機使用(也就說,使用 docker exec 在 container 內(nèi)部環(huán)境中運行程序),那么一定要保證這個 container 一直處于 running 的狀態(tài)。

有兩種情況需要考慮:

1、container 在啟動的時候,CMD 沒有指定一些 service 任務(wù)

2、CMD 中指定了一些重要的 service,比如 web 服務(wù)

對于第二種情況,container 中一直運行著 web 服務(wù)器,作為一個 service,除非你主動 stop 它,這個 service 會一直跑著。于是,起來的 container 也會一直 running,于是執(zhí)行 docker exec 沒有任何問題。

對于第一種情況,很明顯 container 不久之后就會 Exited。讓它一直處于 running 的方法至少有兩種:

既然 CMD 沒有指定啥 service,那么可以假設(shè) CMD 指定的任務(wù)不重要,如果真的很重要,可以在制作 dockerfile 的時候通過 RUN 指定。所以,我們可以修改 CMD,比如

docker run <image> tail -f /dev/null

其中tail -f /dev/null 這個程序會一直 block 住,沒有外界 signal 的情況下,不會退出,于是 container 就一直 running

上面這種方法,畢竟有可能會覆蓋 dockerfile 中的 CMD,一個更好的方法是——docker commit.

docker run <image>
docker commit `docker ps -ql` <new_image>
docker stop `docker ps -ql`
docker rm `docker ps -ql`
docker run <new_image> tail -f /dev/null

其中,docker ps -ql 用于獲得最近創(chuàng)建的 container 的 id。這個方法的缺點在于,多創(chuàng)建了一個 image,占用空間??紤] CI/CD 情形的話,這個缺點幾乎不能忍。

到此,相信大家對“docker容器為什么一直running”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI