目錄
docker inspect 指令:查看容器、映像檔的詳細資訊(-f 格式範例)
docker inspect 以 JSON 格式顯示 Docker 物件的完整設定與狀態,物件可以是容器、映像檔、Volume、網路。
語法
docker inspect [參數] 名稱或ID [名稱或ID...]
| 參數 | 說明 |
|---|---|
-f, --format 範本 | 用 Go 範本只取出需要的部分,或 json |
--type 類型 | 指定物件類型:container、image、volume、network 等(名稱重複時使用) |
-s, --size | 容器:同時顯示大小 |
完整輸出
$ docker inspect web | head -n 12
[
{
"Id": "1ec4fdc5c592b09b64e8f28869c37f89ab17163f88bfcb09e82815a44b0e1164",
"Created": "2026-10-13T05:28:35.05807319Z",
"Path": "/docker-entrypoint.sh",
"Args": [
"nginx",
"-g",
"daemon off;"
],
"State": {
"Status": "running",
完整輸出有數百行,實務上幾乎都會加上 -f 只取需要的欄位。
-f 範本:常用的查詢
以下對一個名為 web 的 nginx 容器查詢(啟動時設定了 -e APP_MODE=demo):
$ docker inspect -f "{{.State.Status}} {{.State.StartedAt}}" web
running 2026-10-13T05:28:40.584115149Z
$ docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" web
172.18.0.2
$ docker inspect -f "{{json .Config.Env}}" web
["APP_MODE=demo","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","NGINX_VERSION=1.30.5","PKG_RELEASE=1","DYNPKG_RELEASE=1","NJS_VERSION=1.0.1","NJS_RELEASE=1","ACME_VERSION=0.4.1"]
$ docker inspect -f "{{.Config.Image}} {{.HostConfig.RestartPolicy.Name}}" web
nginx:1.30-alpine no
| 想知道的 | 範本 |
|---|---|
| 狀態與啟動時間 | {{.State.Status}} {{.State.StartedAt}} |
| 結束代碼、是否記憶體不足 | {{.State.ExitCode}} {{.State.OOMKilled}} |
| IP 位址 | {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} |
| 環境變數 | {{json .Config.Env}} |
| 使用的映像檔、重啟策略 | {{.Config.Image}} {{.HostConfig.RestartPolicy.Name}} |
| 掛載 | {{json .Mounts}} |
| 連接埠對應 | {{json .NetworkSettings.Ports}} |
| 健康檢查結果 | {{json .State.Health}} |
| 主機上的 PID | {{.State.Pid}} |
範本語法:
{{.欄位.子欄位}}:取出一個值。{{json .欄位}}:以 JSON 輸出整段(陣列、物件)。{{range .清單}}...{{end}}:逐一處理清單或物件中的每一項。
Docker 29 的變更:舊教學常見的
{{.NetworkSettings.IPAddress}}已經移除,執行會出現template parsing error: ... map has no entry for key "IPAddress"。請改用上表的range寫法。
映像檔、Volume、網路
$ docker inspect -f "{{.Config.Cmd}} {{.Config.Entrypoint}}" nginx:1.30-alpine
[nginx -g daemon off;] [/docker-entrypoint.sh]
$ docker inspect -f "{{.Architecture}} {{.Os}} {{.Size}}" nginx:1.30-alpine
amd64 linux 92750711
$ docker volume create v1
v1
$ docker inspect -f "{{.Mountpoint}}" v1
/var/lib/docker/volumes/v1/_data
$ docker inspect --type network -f "{{range .IPAM.Config}}{{.Subnet}}{{end}}" bridge
172.18.0.0/16
$ docker volume rm v1
v1
- 映像檔的
.Config.Cmd與.Config.Entrypoint是預設啟動指令,.Architecture是 CPU 架構,.Size是位元組數(92750711 約 92.8 MB)。 - Volume 的
.Mountpoint是資料在 Docker 主機上的實際位置。Docker Desktop 的這個路徑在虛擬機裡,Windows 或 macOS 上無法直接打開。 --type network指定查詢網路,.IPAM.Config是子網路設定。
相關章節
動手練習
練習:查出 web 容器掛載了哪些路徑,以及它的連接埠對應。
答案
docker inspect -f "{{json .Mounts}}" web
docker inspect -f "{{json .NetworkSettings.Ports}}" web
本頁的 web 沒有掛載、也沒有 -p,所以分別是 [] 和只有容器內連接埠的 {"80/tcp":null}。
常見問題
網路上教的 {{.NetworkSettings.IPAddress}} 為什麼出錯?
Docker 29 不再提供這個欄位,使用它會出現 map has no entry for key "IPAddress" 的錯誤。IP 位址要從各個網路中取得:{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}。
怎麼知道有哪些欄位可以查?
先不加 -f 執行一次,輸出的 JSON 結構就是欄位名稱,例如 State.Status 寫成 {{.State.Status}}。也可以用 {{json .Config}} 把某一段整個印出來。
Windows 上 -f 的引號怎麼寫?
在 PowerShell 和 CMD 中都用雙引號包住範本,例如 docker inspect -f "{{.State.Status}}" web。範本中不能再出現雙引號,需要時改用單引號字串。
更新於 2026年10月14日