欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

當(dāng)你已經(jīng)構(gòu)建了一個(gè) Docker 鏡像,但運(yùn)行它的容器啟動(dòng)后立即退出(通常是因?yàn)榉?wù)異?;蚺渲缅e(cuò)誤),你仍然可以通過以下幾種方式進(jìn)入鏡像內(nèi)部進(jìn)行調(diào)試。

? 最佳實(shí)踐:如何對(duì)一個(gè)“啟動(dòng)即退出”的鏡像進(jìn)行命令行調(diào)試?

?? 目標(biāo)

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

? 方法一:使用 docker run 覆蓋 CMD,直接進(jìn)入 shell

這是最推薦的方式。

?? 命令:

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

?? 說明:

  • -it:?jiǎn)⒂媒换ナ浇K端。
  • --rm:退出后自動(dòng)刪除容器(臨時(shí)調(diào)試用)。
  • /bin/sh:覆蓋鏡像的默認(rèn) CMD,不運(yùn)行服務(wù),而是進(jìn)入 shell。
  • 如果你的鏡像中沒有 bash,[sh](file://e:\docker_workspaces(svn.home)\base_systems\openEuler_dns\CreateContainer.sh) 通常是存在的。

?? 示例輸出:

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

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

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

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

?? 命令:

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

?? 說明:

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

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

如果你經(jīng)常需要調(diào)試這個(gè)鏡像,可以新建一個(gè)用于調(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,改為進(jìn)入 Shell
CMD ["/bin/sh"]

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

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

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

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

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

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

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

?? 查看容器日志:

docker logs <container_name_or_id>

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

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 容器復(fù)制文件出來分析

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

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

然后在宿主機(jī)上編輯、檢查配置。

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

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

1. 查看容器 PID:

docker inspect <container_id> | grep HostPid

2. 使用 nsenter 進(jìn)入:

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

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

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

場(chǎng)景推薦方法
容器啟動(dòng)后立刻退出使用 docker run ... /bin/sh 替換 CMD
使用了 ENTRYPOINT使用 --entrypoint /bin/sh
需要保留容器狀態(tài)使用 docker create + docker cp
想復(fù)用原有邏輯調(diào)試創(chuàng)建 debug.Dockerfile 并重新構(gòu)建
分析配置文件使用 docker cp 或 mount volume
高級(jí)調(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é)合日志進(jìn)一步查錯(cuò)。

? 最終建議流程

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

# 2. 手動(dòng)運(yùn)行 DNS 服務(wù)以調(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)試的最佳實(shí)踐的文章就介紹到這了,更多相關(guān)Docker 鏡像調(diào)試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • k8s官方鏡像代理加速方式

    k8s官方鏡像代理加速方式

    這篇文章主要介紹了k8s官方鏡像代理加速方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Docker 環(huán)境配置以及問題解決方案

    Docker 環(huán)境配置以及問題解決方案

    這篇文章主要介紹了Docker 環(huán)境配置以及問題解決方案的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • docker容器中安裝vim問題解決

    docker容器中安裝vim問題解決

    本文主要介紹了docker容器中安裝vim問題解決,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • docker-compose網(wǎng)絡(luò)配置-?IP?主機(jī)名?hosts配置方式

    docker-compose網(wǎng)絡(luò)配置-?IP?主機(jī)名?hosts配置方式

    這篇文章主要介紹了docker-compose網(wǎng)絡(luò)配置-?IP?主機(jī)名?hosts配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 使用YUM 安裝 docker的方法步驟

    使用YUM 安裝 docker的方法步驟

    這篇文章主要介紹了使用YUM 安裝 docker的方法,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • docker容器環(huán)境安裝及鏡像基礎(chǔ)操作

    docker容器環(huán)境安裝及鏡像基礎(chǔ)操作

    容器是一種輕量級(jí)虛擬化技術(shù),能夠快速構(gòu)建業(yè)務(wù)環(huán)境并便于業(yè)務(wù)遷移,解決兼容性問題,這篇文章主要介紹了docker容器環(huán)境安裝及鏡像基礎(chǔ)操作,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • docker+mongodb設(shè)置數(shù)據(jù)庫的賬號(hào)和密碼的實(shí)現(xiàn)步驟

    docker+mongodb設(shè)置數(shù)據(jù)庫的賬號(hào)和密碼的實(shí)現(xiàn)步驟

    本文主要介紹了docker+mongodb設(shè)置數(shù)據(jù)庫的賬號(hào)和密碼的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • Docker中進(jìn)行線上問題排查常用的19個(gè)命令

    Docker中進(jìn)行線上問題排查常用的19個(gè)命令

    這篇文章主要為大家詳細(xì)介紹了19個(gè)Docker線上問題排查的常用命令和工具,掌握這些命令和工具都能顯著提升你的問題排查效率,快跟隨小編一起學(xué)習(xí)一下吧
    2025-05-05
  • docker-compose之基本語法解讀

    docker-compose之基本語法解讀

    這篇文章主要介紹了docker-compose之基本語法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • docker容器內(nèi)安裝TensorRT的問題

    docker容器內(nèi)安裝TensorRT的問題

    很多朋友在使用docker容器內(nèi)安裝TensorRT的時(shí)候,遇到一大堆棘手的問題,不知道怎么處理好了,今天小編就docker安裝TensorRT的問題給大家詳細(xì)介紹下,感興趣的朋友一起看看吧
    2021-05-05

最新評(píng)論