【Linux】Docker洞察:掌握docker inspect命令與Go模板技巧

👨?🎓博主簡介

??🏅CSDN博客專家
??🏅云計算領域優質創作者
??🏅華為云開發者社區專家博主
??🏅阿里云開發者社區專家博主
💊交流社區:運維交流社區 歡迎大家的加入!
🐋 希望大家多多支持,我們一起進步!😄
🎉如果文章對你有幫助的話,歡迎 點贊 👍🏻 評論 💬 收藏 ?? 加關注+💗


在這里插入圖片描述

文章目錄

    • 0?? 前言
      • ① `docker inspect` 是做什么的?
      • ② 為什么要用 Go template ?
    • 1?? 基本語法
    • 2?? JSON → Go template 翻譯法
      • 📌 原始 JSON(隨便選了幾個參數作為參考)
      • ? 基礎:嵌套對象用點號
      • ? 進階:數組 / map[鍵值對集合] 用 `index` 或 `range`
      • ? 高級:輔助函數
      • ? 最終:組合成命令
    • 3?? 常用速查表
    • 4?? 口訣速記

0?? 前言

docker inspect 是做什么的?

? ?答:docker inspect 是用來查看容器/鏡像/卷/網絡等詳細 JSON 配置的命令,比如可以查找容器的映射路徑、端口、網絡模式、重啟模式等等;

  • docker inspect 參數:
參數說明示例
-f, --formatGo模板 格式化輸出docker inspect -f '{{.NetworkSettings.IPAddress}}' nginx
--type指定對象類型(避免歧義)docker inspect --type=image nginx
-s, --size顯示容器總文件大小(僅容器)docker inspect -s my_container

常用參數:-f(或 --format)是 Go template 的格式化參數,允許你只提取需要的字段,避免在一大坨 JSON 里人肉搜索,非常好用。

② 為什么要用 Go template ?

docker inspect 輸出的是整坨 JSON(幾百行,看著比較繁瑣),而我們只想拿其中的 1~2 個字段。

  • 如果每次都用 jq/grep/awk,腳本里要多裝一個二進制,還是比較麻煩的;
  • Go template 直接內建在 Docker CLI 里,零依賴跨平臺一條命令搞定。
本期我們主要講解 docker inspect -f 的使用。

1?? 基本語法

docker inspect -f '<Go模板>' <對象>
  • <對象> 可以是:容器名、容器 ID、鏡像名/ID、卷名、網絡名等等,常用的就是容器名或容器id。
  • <Go模板>Go text/template 語法,字段路徑以 點號 分隔。

那么問題來了,我要怎么知道自己想要的數據是要用哪個Go語法呢?接下來我們講解json如何翻譯成go語法。

2?? JSON → Go template 翻譯法

📌 原始 JSON(隨便選了幾個參數作為參考)

[{"Id": "59c88ce44ce023f......","Created": "2025-07-22T03:15:24.968351115Z","Path": "bash","Args": [],"State": {"Status": "running","Pid": 16698,"StartedAt": "2025-07-22T03:15:26.473607152Z",},"Name": "/my_nginx","HostConfig": {"Binds": ["/home/lcy/nginx/conf/:/usr/local/nginx/conf/","/home/lcy/nginx/html/:/application/nginx/html/","/home/lcy/nginx/logs/:/application/nginx/logs/","/etc/localtime:/etc/localtime/"],"NetworkSettings": {"IPAddress": "172.17.0.2"},"Mounts": [{"Type": "bind","Source": "/home/lcy/nginx/conf/","Destination": "/usr/local/nginx/conf/"}{"Type": "bind","Source": "/home/lcy/nginx/logs/","Destination": "/usr/local/nginx/logs/"}],"Config": {"Env": ["PATH=/usr/bin", "FOO=bar"]}}
]

? 基礎:嵌套對象用點號

我們看json其實就類似與鍵值對那種,比如"Id": "59c88ce44ce023f......",我們就可以找到鍵Id,然后給他轉成Go模板的時候就可以變成{{.Id}},這樣docker inspect -f '{{.Id}}' nginx的時候就可以輸出Id的值了。

拆分{{.Id}}解析:以.作為分割,Id為要查找內容的鍵,加上{{}}{{ }} 是 Go 模板語法里的“占位符”,告訴 Docker:“把這里換成真正的值”。

如果是如下多行json嵌套內容:

    "NetworkSettings": {"IPAddress": "172.17.0.2"},

那這樣就變成了兩層,也就是說要把這兩個鍵都輸入才能查到,如果只輸入最外面這層的鍵是拿不到數據的:{{.NetworkSettings.IPAddress}},如果是三層或者四層,以此類推就行,具體可查看如下JSON → Go 模板 的映射規則。

  • JSON → Go 模板 的映射規則
JSON 片段模板寫法說明 / 口訣
"Name": "/my_c"{{.Name}}頂層字段直接寫
"State": {"Status": "running"}{{.State.Status}}嵌套對象用點號
"NetworkSettings": {"Networks": {"bridge": {"IPAddress": "172.."}}}{{.NetworkSettings.Networks.bridge.IPAddress}}多級嵌套一路點下去
"Env": ["PATH=...", "FOO=bar"]{{index .Env 1}}數組/切片用 index
"Mounts": [{ "Source": "/home/...}{ "Source": "/home/...}]{{range .Mounts}}{{.Source}}{{end}}遍歷 map/array用range
"Mounts": [{...}]{{json .Config.Labels}}輸出原始 JSON 字符串用json
"HostConfig": { "Binds": [ "/home...:/usr/..."]{{join .HostConfig.Binds " "}}拼接數組用join “ ”
{{printf "%.2fMB" .SizeRw}}格式化printf
"Name": "/nginx"{{lower .Name}}
{{upper .Name}}
轉小寫lower
轉大寫 upper

以下為簡單的幾種轉換:

JSONGo template說明
"Id": "59c88ce44ce023f......"{{.Id}}容器ID
"Created": "2025-07-22T03:15:24.968351115Z"{{.Created}}容器創建時間
"State": { "Status": "running" }{{.State.Status}}容器運行狀態
"NetworkSettings": { "IPAddress": "172.17.0.2" }{{.NetworkSettings.IPAddress}}查看容器ip地址

? 進階:數組 / map[鍵值對集合] 用 indexrange

數組/mapJSONGo template說明
數組"HostConfig": { "Binds": [ "/home...:/usr/..."]列出所有:{{.HostConfig.Binds}}
取第一個值:{{index .HostConfig.Binds 0}}
查看容器映射路徑
數組"Env": ["PATH=...", "FOO=bar"]取第一個值:{{index .Config.Env 0}}查看容器環境變量配置
map"Mounts": [{...}]遍歷:{{range .Mounts}}{{.Source}}{{end}}遍歷多組掛載路徑

? 高級:輔助函數

函數JSONGo template說明
json"Mounts": [{...}]{{json .Mounts}}輸出原始 JSON 字符串
join<Go模板> "拼接內容" "HostConfig": { "Binds": [ "/home...:/usr/..."]{{join .HostConfig.Binds " "}}用空格拼接數組
lower / upper"Name": "/nginx"{{lower .Name}}
{{upper .Name}}
轉小寫
轉大寫
printf{{printf "%.2f" .SizeRw}}格式化數字

? 最終:組合成命令

############################ 基礎 ############################
# 查看容器id
docker inspect -f '{{.Id}}' nginx
# 查看容器創建時間
docker inspect -f '{{.Created}}' nginx
# 查看運行狀態
docker inspect -f '{{.State.Status}}' nginx############################ 進階 ############################
# 查看創建容器的映射路徑
docker inspect -f '{{.HostConfig.Binds}}' nginx
# 查看創建容器的映射路徑(只查看第一行)
docker inspect -f '{{index .HostConfig.Binds 0}}' nginx
# 查看容器的環境變量
docker inspect -f '{{index .Config.Env 0}}' nginx
# 遍歷多組掛載路徑
docker inspect -f '{{range .Mounts}}{{.Source}}{{end}}' nginx############################ 高級 ############################
# 查看容器的掛載路徑,以json格式輸出
docker inspect -f '{{json .Mounts}}' nginx
# 用空格拼接掛載目錄
docker inspect -f '{{join .HostConfig.Binds " "}}' nginx
# 切換容器名為小寫
docker inspect -f '{{lower .Name}}' nginx
# 切換容器名為大寫
docker inspect -f '{{upper .Name}}' nginx
# 格式化數字輸出
docker inspect -f '{{printf "%.2f" .SizeRw}}' nginx

3?? 常用速查表

使用命令嵌套使用,覆蓋99%常用參數。

docker inspect -f '<Go template>' 容器名
需求Go template
容器 ID{{.Id}}
容器名{{.Name}}
容器啟動命令{{.Path}} {{join .Args " "}}
容器創建時間{{.Created}}
狀態{{.State.Status}}
主進程 PID{{.State.Pid}}
容器是否因內存不足被殺死{{.State.OOMKilled}}
容器運行時的錯誤信息{{.State.Error}}
容器啟動時間{{.State.StartedAt}}
容器結束時間{{.State.FinishedAt}}
宿主機和容器之間的掛載路徑{{.HostConfig.Binds}}
容器網絡模式{{.HostConfig.NetworkMode}}
容器的重啟策略{{.HostConfig.RestartPolicy.Name}}
容器內的工作目錄{{.GraphDriver.Data.MergedDir}}
所有掛載源路徑{{range .Mounts}}{{.Source}} {{end}}
容器的主機名{{.Config.Hostname}}
容器的環境變量{{.Config.Env}}
{{index .Config.Env 0}}
容器使用的鏡像名稱{{.Config.Image}}
容器默認的工作路徑{{.Config.WorkingDir}}
容器端口映射{{range $p,$c := .NetworkSettings.Ports}}{{$p}}->{{(index $c 0).HostPort}}{{end}}
{{.NetworkSettings.Ports}}
容器 網關 地址{{.NetworkSettings.Gateway}}
{{range .NetworkSettings.Networks}}{{.Gateway}}{{end}}
容器 IP 地址{{.NetworkSettings.IPAddress}}
{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
容器 mac 地址{{.NetworkSettings.MacAddress}}
{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}
  • 更多簡便的查詢命令([過濾],相對與使用如上命令簡單點):
需求命令
查看容器:使用鏡像、運行時長、容器名、
啟動命令、容器ID、運行狀態、端口映射
docker ps -a | grep 容器名
查看容器的創建時間docker inspect 容器名 | grep -i created
查看容器是否因內存不足被殺死docker inspect 容器名 | grep -i OOMKilled
查看容器啟動時間docker inspect 容器名 | grep -i StartedAt
查看容器結束時間docker inspect 容器名 | grep -i FinishedAt
查看容器的網絡模式docker inspect 容器名 | grep -i NetworkMode
查看容器內的工作目錄docker inspect 容器名 | grep -i MergedDir
查看容器外映射路徑docker inspect 容器名 | grep -i source
查看容器的主機名docker inspect 容器名 | grep -i hostname
查看進入容器默認工作路徑docker inspect 容器名 | grep -i WorkingDir
查看容器的 IPdocker inspect 容器名 | grep -i ipaddress
查看容器的 mac 地址docker inspect 容器名 | grep -i macaddress
查看容器的 網關 地址docker inspect 容器名 | grep -i gateway

4?? 口訣速記

嵌套一路點到底,數組切片 index,map 切片 range,數組或map過多用join連接,模板單引號包起來。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97446.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97446.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97446.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

知料覓得-新一代AI搜索引擎

本文轉載自&#xff1a;知料覓得-新一代AI搜索引擎 - Hello123工具導航 ** 一、&#x1f50d; 初識知料覓得&#xff1a;你的 AI 搜索新伙伴 知料覓得是一款融合了前沿人工智能技術的智能搜索引擎&#xff0c;它旨在徹底改變我們獲取信息的方式。不同于傳統搜索引擎只給你一堆…

高性能網絡轉發中的哈希表技術選型與實踐

引言 在現代網絡編程中,處理大量并發連接是一個常見而重要的挑戰。特別是在中間件、代理服務器和負載均衡器等場景中,如何高效地管理數萬個并發連接并實現數據轉發,對系統性能有著至關重要的影響。本文將圍繞一個具體的網絡轉發場景,深入探討三種不同的哈希表實現(hsearc…

【CF】Day136——Codeforces Round 1046 (Div. 2) CD (動態規劃 | 數學)

C. Against the Difference題目&#xff1a;思路&#xff1a;簡單DP不難發現我們貪心是沒法貪的&#xff0c;因此考慮DP我們令 dp[i] 為 前 i 個元素能構造出的最長整齊子序列的長度&#xff0c;不難發現一個很簡單的轉移&#xff0c;即直接繼承 dp[i] dp[i-1]&#xff0c;那么…

如何評價 Kimi 開源的推理平臺 Mooncake?對行業有什么影響?

2月26日&#xff0c;Mooncake的論文獲得「計算機存儲頂會 FAST 2025」Best Paper&#xff0c;這也是國內連續第三年拿到FAST Best Paper。同時&#xff0c;Mooncake 團隊宣布和 vLLM 團隊已經合作制定了一個多階段路線圖。這次整合將為 vLLM 引入 P/D&#xff08;Prefill/Decod…

Java中不太常見的語法-總結

簡介 讀源碼時&#xff0c;或者看同事寫的代碼&#xff0c;經常看到一些不太常見的語法&#xff0c;這里做一個總結 不太常見的語法 成員變量的默認值 案例&#xff1a; public class Person2 {private String name "張三";private Integer age;public String getNa…

Easytier異地組網與移動光貓GS220-s

Easytier異地組網與Nginx反向代理_--relay-network-whitelis easytier-CSDN博客 上一篇文章介紹了Easytier實現異地組網&#xff0c;基于Windows應用&#xff0c;本篇將探討如何將Easytier寫入光貓GS220-s中&#xff0c;實現更方便的家庭組網。 一、Telnet移動光貓GS220-s 1…

衛星信號和無線信號的設備廠商

以下是一些與衛星信號相關的公司&#xff1a;中國衛通集團股份有限公司&#xff1a;中國航天科技集團有限公司從事衛星運營服務業的核心專業子公司&#xff0c;是中國唯一擁有通信衛星資源且自主可控的衛星通信運營企業。運營管理著多顆在軌民商用通信廣播衛星&#xff0c;覆蓋…

HyperPlonk 的硬件友好性

1. 引言 在工業界廣泛使用的 Plonk SNARK 協議高度依賴 NTT 來完成計算。HyperPlonk 是 Plonk 的一個變種&#xff0c;它試圖通過用 Sumcheck 替代 NTT&#xff08;以及其它改進&#xff09;來提升并行性。Ingonyama團隊認為&#xff1a; Sumcheck 在 HyperPlonk 中所謂的并行…

Visual Studio內置環境變量有哪些

在 Visual Studio 中&#xff0c;內置變量&#xff08;也稱為宏&#xff09;可以用于在項目配置中指定特定的路徑、環境變量或其他值。這些變量可以在項目的屬性頁面中使用&#xff0c;也可以在代碼中使用。以下是一些常用的內置變量及其用途&#xff1a; 常用內置變量 $(Solut…

大模型入門學習微調實戰:基于PyTorch和Hugging Face電影評價情感分析模型微調全流程(附完整代碼)手把手教你做

深入淺出&#xff1a;如何訓練一個屬于你的大模型&#xff1f; “一個強大的大模型&#xff0c;究竟是如何訓練出來的&#xff1f;” 本文將基于行業共識&#xff0c;為您詳細拆解大模型的完整訓練流程&#xff0c;并提供一個基于開源模型和數據集的實戰代碼示例&#xff0c;…

零、2025 年軟件設計師考試大綱

一、考試說明 1.考試目標 通過本考試的合格人員能根據軟件開發項目管理和軟件工程的要求&#xff0c;按照系統總體設計規格說明書進行軟件設計&#xff0c;編寫程序設計規格說明書等相應的文檔&#xff0c;組織和指導程序員編寫、調試程序&#xff0c;并對軟件進行優化和集成…

uniapp npm安裝形式 全局分享和按鈕分享設置

全局分享方法新建一個shareUtil.ts方法import { storageConfig } from /config/storageConfig; export default {data() {return {miniShareOptions: {title: 標題,path: /pages/tabbar/index?inviteCode,summary: 描述,imageUrl: /userPages/static/img/invitation_h_bg.png,…

【數據結構】樹和二叉樹——樹和森林

目錄樹和二叉樹樹和森林樹的存儲結構雙親表示法孩子表示法孩子兄弟表示法森林與二叉樹的轉換樹和森林的遍歷樹的先根遍歷樹的后根遍歷樹的層次遍歷森林的先序遍歷森林的中序遍歷樹的應用求樹的深度輸出樹中所有從根到葉子的路徑的算法建樹的存儲結構的算法哈夫曼樹與哈夫曼編碼…

【小寧學習日記5 PCB】電路定理

目錄 一、先搞懂&#xff1a;原理圖的 “構成密碼” &#xff08;1&#xff09;連接線&#xff1a;別被 “直線” 騙了&#xff01; &#xff08;2&#xff09;結點&#xff1a;紅色小圓點才是 “真?連接” &#xff08;3&#xff09;網絡標簽&#xff1a;“無形的連線” …

ans1語法的一個例子nt5inf.cat

第二部分&#xff1a;語法第一部分&#xff1a;頭部語法第一部分A&#xff1a;0x30 類型位0x10SEQUENCE and SEQUENCE OF10語法第一部分B&#xff1a;83 長度3個字節&#xff0c;如果為1個字節&#xff0c;第一部分B則沒有。語法第一部分C&#xff1a;長度 0x09 …

三電平逆變器SVPWM控制(無解耦功能)與諧波分析

三電平逆變器的空間矢量脈寬調制(SVPWM)控制方法&#xff0c;重點分析在不使用解耦控制的情況下實現5%諧波含量的技術方案。我們將使用MATLAB/Simulink進行建模和仿真分析。 一、三電平逆變器基本原理 三電平逆變器相比傳統兩電平逆變器具有以下優勢&#xff1a; 輸出電壓波形質…

模擬實現C++中的string類型:從底層理解字符串操作

string前言核心成員變量設計構造函數與析構函數默認構造函數從C風格字符串構造填充構造拷貝構造函數迭代器范圍構造析構函數基本操作實現迭代器支持容量管理元素訪問字符串修改操作拼接操作插入與刪除字符串查找操作運算符重載總結每文推薦前言 在C中&#xff0c;std::string是…

pdf轉ofd之移花接木

文章目錄1.pdf轉ofd的方法1.1 spire.pdf.free1.2 ofdrw2.移花接木3.總結1.pdf轉ofd的方法 1.1 spire.pdf.free 這個是一個半開源的類庫&#xff0c;免費版本的在轉換的時候會有一個10的限制&#xff0c;所以不推薦使用&#xff0c;具體教程網上都有&#xff0c;這里只是分享有…

用【Coze】實現文案提取+創作

在AI技術飛速發展的當下&#xff0c;打造專屬智能應用成為不少人的向往。今天&#xff0c;就帶大家走進字節跳動的扣子Coze平臺&#xff0c;看看如何借助它搭建智能體&#xff0c;還會介紹AI工作流&#xff0c;以及詳細的Coze搭建步驟&#xff0c;開啟你的AI創作之旅&#xff5…

buuctf——web刷題第5頁

第五頁 目錄 [EIS 2019]EzPOP [WMCTF2020]Make PHP Great Again 2.0 [BSidesCF 2020]Hurdles [安洵杯 2019]iamthinking [GWCTF 2019]mypassword [HFCTF2020]BabyUpload [NewStarCTF 2023 公開賽道]include 0。0 [SWPU2019]Web4 [PASECA2019]honey_shop [Black Watc…