最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

docker容器直接退出如何進(jìn)入容器調(diào)試模式

 更新時間:2022年09月17日 11:49:20   作者:sylvia.liu  
這篇文章主要介紹了docker容器直接退出,如何進(jìn)入容器調(diào)試,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

容器啟動直接退出,想進(jìn)入容器調(diào)試改怎么辦

使用過docker的朋友大概率會遇到docker啟動容器失敗或執(zhí)行完直接退出的情況,如果我想進(jìn)入容器手動執(zhí)行命令調(diào)試,該怎么辦吶?

docker容器啟動失敗正常都是由于啟動主進(jìn)程退出導(dǎo)致的,主進(jìn)程啟動命令往往都是由鏡像Dockerfile文件最后的ENTRYPOINT或CMD定義的,此時可覆蓋主進(jìn)程啟動命令,更換一個掛起的命令即可。我常用掛起命令:/bin/bash

所以,我們要解決的核心問題就是:如何使用掛起命令覆蓋ENTRYPOINT或CMD定義的容器主進(jìn)程命令?

先上結(jié)論(適用所有鏡像)

1. docker run -it --entrypoint /bin/bash鏡像,執(zhí)行后直接進(jìn)入容器。

2. 若docker-compose啟動容器,則需要修改docker-compose.yml文件,在對應(yīng)服務(wù)下增加如下高亮顯示信息;然后docker-compose重新up

version: '3'
services:
  cmd:
    image: 鏡像
    container_name: 容器名
    entrypoint:
    - tail
    - -f
    - /dev/null

執(zhí)行命令進(jìn)入容器 docker exec -it 容器名 /bin/bash

以下為詳細(xì)分析過程:

查看鏡像的dockerfile文件(docker history --no-trunc image),檢查最后容器啟動主進(jìn)程的命令是什么樣的,ENTRYPOINT?CMD?還是它們的組合?覆蓋方式稍有不同。為方便演示,我構(gòu)造了一個簡單Dockerfile文件做案例。

Docker RUN 覆蓋容器主進(jìn)程命令

docker run 使用-it交互參數(shù),覆蓋命令/bin/bash

CMD

FROM centos:latest
MAINTAINER quanling
CMD ["echo","hello World"]

如果使用上面的文件創(chuàng)建鏡像test:cmd,使用history命令查看容器主進(jìn)程命令,下方橙色標(biāo)記部分

[root@localhost docker]# docker history --no-trunc test:cmd
IMAGE                                                                     CREATED          CREATED BY                                                                                                                                                                                                SIZE      COMMENT
sha256:694d5f2d8809ef2847a9b6fd46efed49ab59aa6466784a1e783beb25c2f6c16e   31 seconds ago   /bin/sh -c #(nop)  CMD ["echo" "hello World"]                                                                                                                                                             0B        
sha256:6dcafb4f0c8d93e8793f84bb837ef26ed6293c156dafafbbc520e55ed601a09e   16 minutes ago   /bin/sh -c #(nop)  MAINTAINER quanling                                                                                                                                                                    0B        
sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6   3 months ago     /bin/sh -c #(nop)  CMD ["/bin/bash"]                                                                                                                                                                      0B        
<missing>                                                                 3 months ago     /bin/sh -c #(nop)  LABEL org.label-schema.schema-version=1.0 org.label-schema.name=CentOS Base Image org.label-schema.vendor=CentOS org.label-schema.license=GPLv2 org.label-schema.build-date=20210915   0B        
<missing>                                                                 3 months ago     /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0326ca33fd2942e068863ce2a8491bb71522c652f31fb466 in / 

運(yùn)行容器后成功打印出Hello World后容器直接退出。容器狀態(tài)為Exited(0)。此時容器啟動的主進(jìn)程為橙色標(biāo)記部分

[root@localhost docker]# docker run --name cmd test:cmd
hello World
[root@localhost docker]# docker ps -a
CONTAINER ID   IMAGE      COMMAND                CREATED         STATUS                     PORTS     NAMES
6bc94359c4fd   test:cmd   "echo 'hello World'"   4 seconds ago   Exited (0) 3 seconds ago             cmd

若想讓容器一直up狀態(tài),方便進(jìn)入容器進(jìn)一步操作,需要使用掛起命令覆蓋CMD ["echo","hello World"],

方法1:在命令中增加綠色高亮部分代碼(額外增加-it選項(xiàng)可直接進(jìn)入容器)。進(jìn)入容器成功

[root@localhost docker]# docker run -it --name upcontainer test:cmd /bin/bash
[root@9351844319e3 /]#

更換tty窗口,查看容器狀態(tài)Up。此時容器啟動的主進(jìn)程入橙色標(biāo)記部分,說明覆蓋CMD成功

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND                CREATED          STATUS                     PORTS     NAMES
9351844319e3   test:cmd   "/bin/bash"           11 seconds ago   Up 10 seconds                         upcontainer

方法2:在命令中增加綠色高亮部分代碼(額外增加-it選項(xiàng)可直接進(jìn)入容器)。進(jìn)入容器成功

[root@localhost docker]# docker run --name upcontainer -it --entrypoint /bin/bash test:cmd 
[root@50763cf9a838 /]# 

更換tty窗口,查看容器狀態(tài)Up。此時容器啟動的主進(jìn)程入橙色標(biāo)記部分,說明覆蓋CMD成功

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED              STATUS              PORTS     NAMES
50763cf9a838   test:cmd   "/bin/bash"   About a minute ago   Up About a minute             upcontainer

ENTRYPOINT

FROM centos:latest
MAINTAINER quanling
ENTRYPOINT ["echo","Hello World"]

如果使用上面的文件創(chuàng)建鏡像test:ENTRYPOINT

運(yùn)行容器后成功打印出Hello World后容器直接退出。容器狀態(tài)為Exited(0)。此時容器啟動的主進(jìn)程入橙色標(biāo)記部分

[root@localhost docker]# docker run --name ENTRYPOINT test:ENTRYPOINT
Hello World
[root@localhost docker]# docker ps -a
CONTAINER ID   IMAGE             COMMAND                CREATED         STATUS                     PORTS     NAMES
e6cf335c5c09   test:ENTRYPOINT   "echo 'Hello World'"   8 seconds ago   Exited (0) 6 seconds ago             ENTRYPOINT

若想讓容器一直up狀態(tài),方便exec進(jìn)入容器進(jìn)一步操作,需要使用掛起命令覆蓋ENTRYPOINT["echo","hello World"],模仿上面的操作,結(jié)果如下,容器Exited狀態(tài)(--no-trunc顯示全輸出信息)

[root@localhost docker]# docker run --name upcontainer test:ENTRYPOINT /bin/bash
Hello World /bin/bash[root@localhost docker]# docker ps -a --no-trunc
CONTAINER ID                                                       IMAGE             COMMAND                                  CREATED         STATUS                     PORTS     NAMES
0476c3014fa4c28615b72c231971c6b5186a310f9b2f5cae466643d65b236c34   test:ENTRYPOINT   "echo 'Hello World' /bin/bash"   2 minutes ago   Exited (0) 2 minutes ago             upcontainer
e6cf335c5c09df35845f40abfd81594e17b3457891128ee2108414d7573e62a3   test:ENTRYPOINT   "echo 'Hello World'"                     7 minutes ago   Exited (0) 7 minutes ago             ENTRYPOINT

我們想執(zhí)行的掛起命令并未覆蓋ENTRYPOINT命令,反而作為echo命令的參數(shù)部分一起輸出了。因?yàn)楦采wENTRYPOINT命令需要使用--entrypoint設(shè)置(額外增加-it選項(xiàng)可直接進(jìn)入容器),進(jìn)入容器成功。

[root@localhost docker]# docker run -it --entrypoint /bin/bash --name upcontainer test:ENTRYPOINT
[root@4fe14a5e7bd1 /]#

更換tty窗口,查看容器狀態(tài)Up。此時容器啟動的主進(jìn)程入橙色標(biāo)記部分,說明覆蓋ENTRYPOINT成功

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE             COMMAND                CREATED          STATUS                      PORTS     NAMES
4fe14a5e7bd1   test:ENTRYPOINT   "/bin/bash"            11 seconds ago   Up 10 seconds                         upcontainer
e6cf335c5c09   test:ENTRYPOINT "echo 'Hello World'" 14 minutes ago Exited (0) 14 minutes ago ENTRYPOINT

ENTRYPOINT&CMD

FROM centos:latest
MAINTAINER quanling
ENTRYPOINT ["echo"]
CMD ["hello World"]

如果使用上面的文件創(chuàng)建鏡像test:mixed。使用history命令查看容器主進(jìn)程命令,下方橙色標(biāo)記部分

[root@localhost docker]# docker history --no-trunc test:mixed
IMAGE                                                                     CREATED          CREATED BY                                                                                                                                                                                                SIZE      COMMENT
sha256:2c1f8303382cb221fac04a76234d0b1afe3a513205267afe2d01f39006877be8   24 seconds ago   /bin/sh -c #(nop)  CMD ["hello World"]                                                                                                                                                                    0B        
sha256:13608f257d7b6d1ae771af1aec482b7b87650703648a4ac5c03e8715f78c0079   25 seconds ago   /bin/sh -c #(nop)  ENTRYPOINT ["echo"]                                                                                                                                                                    0B        
sha256:6dcafb4f0c8d93e8793f84bb837ef26ed6293c156dafafbbc520e55ed601a09e   2 hours ago      /bin/sh -c #(nop)  MAINTAINER quanling                                                                                                                                                                    0B        
sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6   3 months ago     /bin/sh -c #(nop)  CMD ["/bin/bash"]                                                                                                                                                                      0B        
<missing>                                                                 3 months ago     /bin/sh -c #(nop)  LABEL org.label-schema.schema-version=1.0 org.label-schema.name=CentOS Base Image org.label-schema.vendor=CentOS org.label-schema.license=GPLv2 org.label-schema.build-date=20210915   0B        
<missing>                                                                 3 months ago     /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0326ca33fd2942e068863ce2a8491bb71522c652f31fb466 in /                                                                                                          231MB

運(yùn)行容器后成功打印出Hello World后容器直接退出。容器狀態(tài)為Exited(0)。此時容器啟動的主進(jìn)程為橙色標(biāo)記部分

[root@localhost docker]# docker run --name mixed test:mixed
hello World
[root@localhost docker]# docker ps -a
CONTAINER ID   IMAGE      COMMAND                CREATED         STATUS                     PORTS     NAMES
22362d314132   test:mixed   "echo 'hello World'"   4 seconds ago   Exited (0) 3 seconds ago             mixed

若想讓容器一直up狀態(tài),方便進(jìn)入容器進(jìn)一步操作,需要覆蓋Etrypoint和CMD中命令,在命令中增加綠色高亮部分代碼(額外增加-it選項(xiàng)可直接進(jìn)入容器)。查看執(zhí)行結(jié)果

[root@localhost docker]# docker run -it --name upcontainer test:mixed /bin/bash
/bin/bash
[root@localhost docker]# docker ps -a
CONTAINER ID   IMAGE        COMMAND                CREATED         STATUS                     PORTS     NAMES
df18afb54646   test:mixed   "echo /bin/bash"       6 seconds ago   Exited (0) 5 seconds ago             upcontainer
22362d314132   test:mixed   "echo 'hello World'"   3 minutes ago   Exited (0) 3 minutes ago             mixed

執(zhí)行發(fā)現(xiàn)容器為Exited狀態(tài),打印出“/bin/bash”后容器退出。說明該操作僅僅覆蓋了CMD ["hello World"]部分,保留了ENTRYPOINT ["echo"]部分。正確的操作應(yīng)該使用--entrypoint設(shè)置(額外增加-it選項(xiàng)可直接進(jìn)入容器),進(jìn)入容器成功。

[root@localhost docker]# docker run -it --entrypoint /bin/bash --name upcontainer test:mixed 
[root@deb56cf88e89 /]#

更換tty窗口,查看容器狀態(tài)Up。此時容器啟動的主進(jìn)程入橙色標(biāo)記部分,說明覆蓋ENTRYPOINT成功

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE        COMMAND                CREATED              STATUS                     PORTS     NAMES
deb56cf88e89   test:mixed   "/bin/bash"            About a minute ago   Up About a minute                   upcontainer
22362d314132   test:mixed   "echo 'hello World'"   8 minutes ago        Exited (0) 8 minutes ago             mixed

docker-compose中的覆蓋主進(jìn)程命令

有些容器是使用docker-compose來啟動容器的,按照Dockerfile文件的不同,docker-compose中的修改不同,覆蓋命令 tail -f /dev/null

利用上面三個鏡像,編寫docker-compose.yml文件

version: '3'
services:
  cmd:
    image: test:cmd
    container_name: cmd
  ENTRYPOINT:
    image: test:ENTRYPOINT
    container_name: ENTRYPOINT
  mixed:
    image: test:mixed
    container_name: mixed

啟動三個鏡像的服務(wù)容器,都執(zhí)行后退出Exited狀態(tài)。容器主進(jìn)程見下方橙色高亮部分

[root@localhost docker]# docker-compose up -d
Starting cmd        ... done
Creating ENTRYPOINT ... done
Creating mixed      ... done
[root@localhost docker]# docker ps -a
CONTAINER ID   IMAGE             COMMAND                CREATED          STATUS                      PORTS     NAMES
7519cbfb6ef8   test:mixed        "echo 'hello World'"   40 seconds ago   Exited (0) 36 seconds ago             mixed
d1c2709a0173   test:ENTRYPOINT   "echo 'Hello World'"   40 seconds ago   Exited (0) 36 seconds ago             ENTRYPOINT
e2206ea2cfc1   test:cmd          "echo 'hello World'"   2 minutes ago    Exited (0) 37 seconds ago             cmd

Entrypoint命令

在docker-compose.yaml 文件中每個服務(wù)下添加以下綠色高亮區(qū)域命令,以覆蓋原來docker中的命令

version: '3'
services:
  cmd:
    image: test:cmd
    container_name: cmd
    entrypoint:
    - tail
    - -f
    - /dev/null
  ENTRYPOINT:
    image: test:ENTRYPOINT
    container_name: ENTRYPOINT
    entrypoint:
    - tail
    - -f
    - /dev/null
  mixed:
    image: test:mixed
    container_name: mixed
    entrypoint:
    - tail
    - -f
    - /dev/null

重新啟動容器,容器全部為up狀態(tài),主程序命令被替換為"tail -f /dev/null"

[root@localhost docker]# docker-compose up -d
Starting mixed        ... done
Starting cmd          ... done
Recreating ENTRYPOINT ... done
[root@localhost docker]# docker ps -a
CONTAINER ID   IMAGE             COMMAND               CREATED          STATUS          PORTS     NAMES
2d4682226bb0   test:cmd          "tail -f /dev/null"   4 seconds ago    Up 2 seconds              cmd
c3870ab0d462   test:mixed        "tail -f /dev/null"   31 seconds ago   Up 28 seconds             mixed
7320deecd45a   test:ENTRYPOINT   "tail -f /dev/null"   59 seconds ago   Up 55 seconds             ENTRYPOINT

在docker-compose.yaml 文件中每個服務(wù)下添加以下綠色高亮區(qū)域命令

version: '3'
services:
  cmd:
    image: test:cmd
    container_name: cmd
    command: tail -f /dev/null
  ENTRYPOINT:
    image: test:ENTRYPOINT
    container_name: ENTRYPOINT
    command: tail -f /dev/null
  mixed:
    image: test:mixed
    container_name: mixed
    command: tail -f /dev/null

重新啟動容器,查看容器狀態(tài),及主程序命令

[root@localhost docker]# docker-compose up -d
cmd is up-to-date  ... done
Recreating ENTRYPOINT ... done
Recreating mixed      ... done
[root@localhost docker]# docker ps -a --no-trunc
CONTAINER ID                                                       IMAGE             COMMAND                                  CREATED              STATUS                          PORTS     NAMES
bf67da0ba9815a013a2005d61daa223e31586bf1cde279933ba71d0148c721ff   test:mixed        "echo tail -f /dev/null"                 About a minute ago   Exited (0) About a minute ago             mixed
f019610b1aedb54904704227ae661f421786b72ecc9e3b35154442c4717afcb0   test:ENTRYPOINT   "echo 'Hello World' tail -f /dev/null"   About a minute ago   Exited (0) About a minute ago             ENTRYPOINT
224bc6db4563531c68947a38acbf3418c43149b2ef6a92565f940a98ab1a9b1e   test:cmd          "tail -f /dev/null"                      10 minutes ago       Up 10 minutes                             cmd

分析結(jié)論

使用commad命令,結(jié)果僅test:cmd中命令被替換;test:Entrypoint鏡像未被覆蓋,且commad命令作為參數(shù)傳入;test:mixed鏡像僅CMD部分命令被替換,ENTRYPOINT部分未被替換。與docker run運(yùn)行結(jié)果一致。

補(bǔ)充

容器up狀態(tài)時,執(zhí)行exec命令進(jìn)入容器

# docker exec -it  容器名 /bin/bash

容器內(nèi)查看相關(guān)配置是否符合預(yù)期,手動執(zhí)行鏡像原entrypoint/cmd命令跟著日志進(jìn)行調(diào)試

鏡像往往很精簡,不包含yum、vi 等命令,導(dǎo)致需要修改配置進(jìn)行調(diào)試受阻,除安裝所需命令這個麻煩的方法外,還可以在容器外使用docker cp命令

$ docker cp 容器名:文件完整路徑 本地路徑 #容器內(nèi)文件copy到本地

$ docker cp 本地文件容器名:文件完整路徑 #本地文件copy到容器內(nèi)

$ docker run -it --rm --entrypoint="" 容器名 /bin/bash

到此這篇關(guān)于docker容器直接退出,如何進(jìn)入容器調(diào)試的文章就介紹到這了,更多相關(guān)docker容器直接退出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker 架構(gòu)簡介

    Docker 架構(gòu)簡介

    這篇文章主要介紹了Docker 架構(gòu)的相關(guān)資料,文中講解非常細(xì)致,幫助大家開始學(xué)習(xí)docker,感興趣的朋友可以了解下
    2020-07-07
  • 阿里云docker容器固定應(yīng)用到到某一個節(jié)點(diǎn)記錄

    阿里云docker容器固定應(yīng)用到到某一個節(jié)點(diǎn)記錄

    這篇文章主要介紹了阿里云docker容器固定應(yīng)用到到某一個節(jié)點(diǎn)記錄,需要的朋友可以參考下
    2018-05-05
  • Docker基本命令使用詳解(推薦)

    Docker基本命令使用詳解(推薦)

    因?yàn)楣ぷ髦行枰獙⒎?wù)容器化,所以最近開始學(xué)習(xí)Docker相關(guān)的知識,對于Docker入門常用的命令總結(jié)下分享到腳本之家平臺,需要的的朋友參考下
    2017-03-03
  • 關(guān)于Docker 刪除dead狀態(tài)的容器問題及解決方案

    關(guān)于Docker 刪除dead狀態(tài)的容器問題及解決方案

    這篇文章主要介紹了Docker 刪除dead狀態(tài)的容器,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Docker?Desktop無法正常啟動解決(failed?to?start...)

    Docker?Desktop無法正常啟動解決(failed?to?start...)

    有一段時間沒有使用docker了,突然要用到結(jié)果發(fā)現(xiàn)docker?desktop用不了了,這篇文章主要給大家介紹了關(guān)于Docker?Desktop無法正常啟動解決的過程,,需要的朋友可以參考下
    2023-01-01
  • 使用Docker部署Angular項(xiàng)目的方法步驟

    使用Docker部署Angular項(xiàng)目的方法步驟

    這篇文章主要介紹了使用Docker部署Angular項(xiàng)目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • docker常用容器啟動docker-compose.yml配置文件使用

    docker常用容器啟動docker-compose.yml配置文件使用

    這篇文章主要介紹了docker常用容器啟動docker-compose.yml配置文件使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Docker部署Django應(yīng)用的示例

    Docker部署Django應(yīng)用的示例

    這篇文章主要介紹了Docker部署Django應(yīng)用的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 解決docker網(wǎng)絡(luò)錯誤(network bridge not found)

    解決docker網(wǎng)絡(luò)錯誤(network bridge not found)

    這篇文章主要介紹了解決docker網(wǎng)絡(luò)錯誤(network bridge not found)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Ollama在Docker下的安裝與配置詳細(xì)教程

    Ollama在Docker下的安裝與配置詳細(xì)教程

    這篇文章主要介紹了如何通過Docker拉取Ollama鏡像并運(yùn)行,包括可視化界面和命令行兩種方式,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02

最新評論

页游| 维西| 彭山县| 神池县| 公安县| 柞水县| 盐山县| 香河县| 阿鲁科尔沁旗| 礼泉县| 开远市| 哈巴河县| 秭归县| 平定县| 怀仁县| 同德县| 镇坪县| 蓬溪县| 古浪县| 资阳市| 罗甸县| 衡东县| 石首市| 瑞金市| 永安市| 镇宁| 文山县| 平邑县| 梅河口市| 安泽县| 长岭县| 安宁市| 金溪县| 合作市| 东平县| 车险| 昔阳县| 营口市| 晴隆县| 徐汇区| 凤凰县|