摘要:?jiǎn)栴}運(yùn)行命令后,發(fā)現(xiàn)容器并沒有跑起來,而是變成了狀態(tài)。容器的生命周期。要把容器看做是一個(gè)多帶帶的進(jìn)程及運(yùn)行環(huán)境。其中的值是可以被覆蓋的。如下圖根據(jù)上圖中的前兩行可知,容器運(yùn)行后默認(rèn)執(zhí)行的是腳本,腳本命令的參數(shù)是。
問題:運(yùn)行docker run -itd -p 5000:5000 --name localregistry registry:2.5 /bin/bash命令后,發(fā)現(xiàn)容器并沒有跑起來,而是變成了Exited狀態(tài)。如果將末尾的/bin/bash去掉,容器就能正常的start了
解決:
翻看不少docker資料, 到目前為止,對(duì)導(dǎo)致此問題的出現(xiàn)算是有了一個(gè)比較清晰的認(rèn)識(shí)。
1.容器的生命周期。要把docer容器看做是一個(gè)多帶帶的進(jìn)程及運(yùn)行環(huán)境。容器不等價(jià)于一個(gè)虛擬的操作系統(tǒng)。Docker的開發(fā)人員也一直主張doder容器應(yīng)該只運(yùn)行一個(gè)進(jìn)程。例如,一個(gè)web server服務(wù)就是一個(gè)進(jìn)程。docker run命令就是為了運(yùn)行一個(gè)進(jìn)程。當(dāng)一個(gè)進(jìn)程結(jié)束了,那么docker容器也就結(jié)束了。
2.根據(jù)問題中描述的現(xiàn)象,兩條命令的差別就在與末尾是否添加了/bin/bash這條command。暫且先停住。我們回過頭來看docker image是怎么生成的。
3.Dockerfile文件。Dockerfile文件中有兩個(gè)關(guān)鍵字CMD和ENTRYPOINT。其中CMD的值是可以被覆蓋的。舉個(gè)栗子:
假設(shè)Dockerfile中的內(nèi)容包含了:
FROM python CMD ["/home/hello.sh","Hello World"] ENTRYPOINT ["/home/hello.sh","xiaoming"]
那么根據(jù)CMD可被覆蓋的特征來看,如果在docker run后增加了/bin/bash。那么,在鏡像run的時(shí)候,執(zhí)行的CMD就變成了/bin/bash。一般鏡像文件中兩種關(guān)鍵字選用其中之一就可以了。但也可以同時(shí)使用。同時(shí)使用的時(shí)候,CMD中的值會(huì)被當(dāng)作ENTRYPOINT的參數(shù)。所以,ENTRYPOINT的內(nèi)容就變成["/home/hello.sh","/bin/bash"]。
4.我們?cè)賮砜次乙獑?dòng)的registry鏡像中都包含了哪些CMD和ENTRYPOINT。如下圖:
根據(jù)上圖中的前兩行可知,容器運(yùn)行后默認(rèn)執(zhí)行的是/entrypoint.sh腳本,腳本命令的參數(shù)是/etc/docker/regis...。所以,如果我們自己在run的時(shí)候添加了新的command,那么鏡像內(nèi)置的執(zhí)行命令就無法正確執(zhí)行了,于是容器就Exited了。
最后,準(zhǔn)備附上參考資料鏈接。但由于此文章是跨天寫的,有些資料找不到了。大家上網(wǎng)查查CMD與ENTRYPOINT區(qū)別的資料的就明白了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27011.html
摘要:容器操作啟動(dòng)啟動(dòng)容器啟動(dòng)容器有兩種方式,一種是基于鏡像新建一個(gè)容器并啟動(dòng),另外一個(gè)是將在終止?fàn)顟B(tài)的容器重新啟動(dòng)。只用參數(shù)時(shí),由于沒有分配偽終端,界面沒有我們熟悉的命令提示符,但命令執(zhí)行結(jié)果仍然可以返回。會(huì)發(fā)送信號(hào)給容器。 容器是 Docker 又一核心概念。簡(jiǎn)單的說,容器是獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用,以及它們的運(yùn)行態(tài)環(huán)境。對(duì)應(yīng)的,虛擬機(jī)可以理解為模擬運(yùn)行的一整套操作系統(tǒng)(提供了運(yùn)行態(tài)環(huán)境...
摘要:腳本運(yùn)行函數(shù)執(zhí)行完后,刪除啟動(dòng)以上是制作鏡像的配置文件。鏡像必須先鏡像,才能鏡像。查看容器狀態(tài)進(jìn)入到容器中查看數(shù)據(jù)庫(kù)只要數(shù)據(jù)庫(kù)文件目錄存在,可以隨意刪除重建,恢復(fù)很快。 構(gòu)建DB Docker鏡像 mysql的代碼文件 [root@Optimus /]# cd docker-training/ [root@Optimus docker-training]# ls centos7 my...
摘要:本系列教程翻譯自,系列共有九篇,本文譯自第二篇??偨Y(jié)本章知識(shí)介紹了最基本的十五個(gè)命令,接下來的教程將會(huì)陸續(xù)介紹如何在中運(yùn)行一個(gè)應(yīng)用以及其他的命令。接下來會(huì)在本系列教程結(jié)束后補(bǔ)充幾篇應(yīng)用的實(shí)例。 本系列教程翻譯自 Flux7 Docker Tutorial Series,系列共有九篇,本文譯自第二篇 Part 2: The 15 Commands。 該系列所有文章將參考其他學(xué)習(xí)...
摘要:本系列教程翻譯自,系列共有九篇,本文譯自第二篇??偨Y(jié)本章知識(shí)介紹了最基本的十五個(gè)命令,接下來的教程將會(huì)陸續(xù)介紹如何在中運(yùn)行一個(gè)應(yīng)用以及其他的命令。接下來會(huì)在本系列教程結(jié)束后補(bǔ)充幾篇應(yīng)用的實(shí)例。 本系列教程翻譯自 Flux7 Docker Tutorial Series,系列共有九篇,本文譯自第二篇 Part 2: The 15 Commands。 該系列所有文章將參考其他學(xué)習(xí)...
閱讀 1396·2023-04-25 18:34
閱讀 3459·2021-11-19 09:40
閱讀 2836·2021-11-17 09:33
閱讀 2950·2021-11-12 10:36
閱讀 2837·2021-09-26 09:55
閱讀 2663·2021-08-05 10:03
閱讀 2527·2019-08-30 15:54
閱讀 2873·2019-08-30 15:54