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

Docker 鏡像調(diào)試的最佳實踐

 更新時間:2025年05月27日 08:31:26   作者:長天一色  
本文主要介紹了Docker 鏡像調(diào)試的最佳實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

當你已經(jīng)構(gòu)建了一個 Docker 鏡像,但運行它的容器啟動后立即退出(通常是因為服務異常或配置錯誤),你仍然可以通過以下幾種方式進入鏡像內(nèi)部進行調(diào)試

? 最佳實踐:如何對一個“啟動即退出”的鏡像進行命令行調(diào)試?

?? 目標

進入容器的命令行環(huán)境,即使它默認運行的服務會失敗。

? 方法一:使用 docker run 覆蓋 CMD,直接進入 shell

這是最推薦的方式。

?? 命令:

docker run -it --rm openeuler/dns:22.03-lts-sp4 /bin/sh

?? 說明:

  • -it:啟用交互式終端。
  • --rm:退出后自動刪除容器(臨時調(diào)試用)。
  • /bin/sh:覆蓋鏡像的默認 CMD,不運行服務,而是進入 shell。
  • 如果你的鏡像中沒有 bash,[sh](file://e:\docker_workspaces(svn.home)\base_systems\openEuler_dns\CreateContainer.sh) 通常是存在的。

?? 示例輸出:

/ # ls /etc/named.conf
/etc/named.conf

你可以在這個 Shell 中檢查配置文件、權(quán)限、用戶是否存在等問題。

? 方法二:使用 docker run + --entrypoint 進入(適用于自定義 ENTRYPOINT 的情況)

如果你的鏡像設置了 ENTRYPOINT(比如總是運行某個腳本),你可以通過 --entrypoint 覆蓋它。

?? 命令:

docker run -it --rm --entrypoint /bin/sh openeuler/dns:22.03-lts-sp4

?? 說明:

  • --entrypoint 會忽略 Dockerfile 中定義的 ENTRYPOINT 和 CMD
  • 然后你再手動執(zhí)行你想測試的命令,例如:
    /usr/sbin/named -g -c /etc/named.conf
    

? 方法三:創(chuàng)建一個新的調(diào)試鏡像(適合復雜場景)

如果你經(jīng)常需要調(diào)試這個鏡像,可以新建一個用于調(diào)試的鏡像,修改其行為。

1. 創(chuàng)建 [debug.Dockerfile](file://e:\docker_workspaces(svn.home)\base_systems\openEuler_dns\debug.Dockerfile) 文件:

FROM openeuler/dns:22.03-lts-sp4

# 覆蓋原 CMD,改為進入 Shell
CMD ["/bin/sh"]

2. 構(gòu)建調(diào)試鏡像:

docker build -f debug.Dockerfile -t openeuler/dns:debug .

3. 啟動并調(diào)試:

docker run -it --rm openeuler/dns:debug

這樣你就可以在一個和原鏡像幾乎一致的環(huán)境中進行排查了。

? 方法四:查看日志 + inspect 日志文件 + 掛載目錄分析

如果你只是想快速查看出錯原因,可以結(jié)合以下命令定位問題:

?? 查看容器日志:

docker logs <container_name_or_id>

?? 進入容器文件系統(tǒng)(即使沒運行):

docker create --name debug-container openeuler/dns:22.03-lts-sp4
docker cp debug-container:/var/log/messages ./messages.log
cat ./messages.log

或者掛載目錄后查看文件:

docker run -it --rm -v ./debug:/mnt openeuler/dns:22.03-lts-sp4 /bin/sh
ls /mnt

? 方法五:使用 scratch 容器復制文件出來分析

有時你只需要看看里面的文件內(nèi)容而不運行服務本身。

docker create --name temp openeuler/dns:22.03-lts-sp4
docker cp temp:/etc/named.conf ./named.conf
docker rm temp

然后在宿主機上編輯、檢查配置。

? 方法六:使用 nsenter 進入容器命名空間(高級)

如果你有運行過的容器(哪怕只運行了幾秒),可以用 nsenter 進入其命名空間。

1. 查看容器 PID:

docker inspect <container_id> | grep HostPid

2. 使用 nsenter 進入:

sudo nsenter -t <PID> -m -u -i -n -p

這可以讓你看到容器內(nèi)完整的進程、網(wǎng)絡、掛載信息。

? 總結(jié):不同場景下的調(diào)試策略

場景推薦方法
容器啟動后立刻退出使用 docker run ... /bin/sh 替換 CMD
使用了 ENTRYPOINT使用 --entrypoint /bin/sh
需要保留容器狀態(tài)使用 docker create + docker cp
想復用原有邏輯調(diào)試創(chuàng)建 debug.Dockerfile 并重新構(gòu)建
分析配置文件使用 docker cp 或 mount volume
高級調(diào)試(pid/ns)使用 nsenter 或 docker inspect

? 附注:如何查看容器退出原因?

docker inspect <container_id> | grep -i "exit_code"
# 或者
docker inspect <container_id> | grep -A 10 "State"

輸出示例:

"State": {
    "ExitCode": 1,
    "Error": "",
    "FinishedAt": "2025-05-20T12:00:00Z",
    "Running": false,
    "Paused": false,
    "Restarting": false,
    "OOMKilled": false,
    "Dead": false,
    "Pid": 0,
    "ExitCode": 1,
    "Error": "",
    "StartedAt": "2025-05-20T11:59:59Z",
    "FinishedAt": "2025-05-20T11:59:59Z"
}

如果 ExitCode != 0,表示非正常退出,結(jié)合日志進一步查錯。

? 最終建議流程

# 1. 進入容器 shell
docker run -it --rm openeuler/dns:22.03-lts-sp4 /bin/sh

# 2. 手動運行 DNS 服務以調(diào)試
/usr/sbin/named -g -c /etc/named.conf

# 3. 檢查文件權(quán)限
ls -l /var/named

# 4. 查看日志文件
cat /var/log/messages

# 5. 檢查 named 用戶是否存在
id named

如果你愿意貼出完整的 [Dockerfile](file://e:\docker_workspaces(svn.home發(fā)生異常,可以輸入更多信息再讓我來回答或重試

到此這篇關(guān)于Docker 鏡像調(diào)試的最佳實踐的文章就介紹到這了,更多相關(guān)Docker 鏡像調(diào)試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker使用阿里云鏡像倉庫的方法

    docker使用阿里云鏡像倉庫的方法

    本篇文章主要介紹了docker使用阿里云鏡像倉庫的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 聊聊docker跨主機之間容器通信問題

    聊聊docker跨主機之間容器通信問題

    這篇文章主要介紹了docker跨主機之間容器通信問題,創(chuàng)建網(wǎng)橋之后,使用ifconfig查看會多出一個網(wǎng)橋,該網(wǎng)橋在docker啟動或者重啟之后,會自動顯示出來,具體實踐跟隨小編一起看看吧
    2022-05-05
  • Docker安裝ollama過程解讀

    Docker安裝ollama過程解讀

    Ollama是一個開源的LLM服務工具,用于簡化在本地運行大語言模型,本文介紹了如何使用Docker安裝Ollama并運行大語言模型,包括拉取鏡像、運行容器和加載模型,最后,還介紹了如何安裝OpenWebUI進行Web界面交互
    2025-02-02
  • 如何使用Docker定時備份數(shù)據(jù)

    如何使用Docker定時備份數(shù)據(jù)

    這篇文章主要介紹了如何使用Docker定時備份數(shù)據(jù),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-04-04
  • docker鏡像下載的另一種方式(實測有效!)

    docker鏡像下載的另一種方式(實測有效!)

    在Docker中下載鏡像是一個關(guān)鍵步驟,因為鏡像是容器運行的基礎這篇,文章主要給大家介紹了關(guān)于docker鏡像下載的另一種方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-05-05
  • 解決Docker安裝錯誤failure:repodata/repomd.xml from docker-ce-stable

    解決Docker安裝錯誤failure:repodata/repomd.xml from docke

    在使用yum命令安裝docker或其他工具時可能會遇到failure_repodata_repomd.xmlfromdocker-ce-stable_[Errno256]Nomoremirrorstotry的錯誤,原因可能是yum源配置問題,解決方法包括重置yum源,刪除多余的repo文件
    2024-11-11
  • docker容器通信參數(shù)使用及l(fā)ink參數(shù)介紹

    docker容器通信參數(shù)使用及l(fā)ink參數(shù)介紹

    這篇文章主要介紹了docker容器通信參數(shù)使用及l(fā)ink參數(shù)介紹,link的原理就是在/etc/hosts里面添加了一個alias的名稱,本文通過案例分析給大家詳細講解,需要的朋友可以參考下
    2022-09-09
  • Docker使用nodejs鏡像構(gòu)建express服務的方法

    Docker使用nodejs鏡像構(gòu)建express服務的方法

    這篇文章主要介紹了Docker使用nodejs鏡像構(gòu)建express服務,主要包括nodejs容器的啟動,安裝nodejs第三方依賴模塊及啟動nodejs服務的相關(guān)操作,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • kali下對Docker的詳細安裝教程

    kali下對Docker的詳細安裝教程

    這篇文章主要介紹了kali下對Docker的詳細安裝,Docker是滲透測試中必學不可的一個容器工具,在其中,我們能夠快速創(chuàng)建、運行、測試以及部署應用程序,對kali安裝docker相關(guān)知識感興趣的朋友一起看看吧
    2022-05-05
  • 解決執(zhí)行docker daemon命令時出錯的問題

    解決執(zhí)行docker daemon命令時出錯的問題

    daemon 這是docker 操作中十分常用的命令指定項,最近在運行docker daemon命令卻發(fā)生了錯誤,后來通過測試各種方法終于解決了,現(xiàn)在將方法分享給大家,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-11-11

最新評論

城固县| 永昌县| 南丰县| 大新县| 北碚区| 宜章县| 聊城市| 信丰县| 望奎县| 温州市| 如皋市| 辽阳市| 无极县| 岑巩县| 泰兴市| 林西县| 尼木县| 嘉荫县| 伊宁县| 宜黄县| 江永县| 密云县| 昌邑市| 开江县| 集安市| 来安县| 东台市| 都昌县| 广汉市| 博野县| 忻州市| 乐平市| 德格县| 西充县| 鸡泽县| 高密市| 大田县| 西乌珠穆沁旗| 兴海县| 广饶县| 刚察县|