docker容器inspect內(nèi)容NetworkSettings的使用
docker inspectNetworkSettingsNetworkSettings
- 頂層字段(
Legacy / Global):主要適用于默認(rèn)bridge網(wǎng)絡(luò)(即docker run未指定--network時)。 Networks對象:包含容器連接的每個網(wǎng)絡(luò)的詳細(xì)配置(支持多網(wǎng)絡(luò))。
一、示例
$ docker inspect 9045fd6a4335 | jq '.[0].NetworkSettings'
{
"Bridge": "",
"SandboxID": "71132bcfbb0f31622aecfd17c7f7d6a257ceaa0dcf935c0edabfabf05df6b4bf",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8080"
}
]
},
"SandboxKey": "/var/run/docker/netns/71132bcfbb0f",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "a7655a6a25a9c0be70e0e47e1de4bbd81c79ab6c783e51946c67b420d2fabc50",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:03",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "4b0e8535a09d2bbe8b21abc39dcc03715ad338bde8a94956b7e181f9d7b4b4be",
"EndpointID": "a7655a6a25a9c0be70e0e47e1de4bbd81c79ab6c783e51946c67b420d2fabc50",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:03",
"DriverOpts": null,
"Time": 0,
"SkipResolver": false
}
}
}
二、頂層字段詳解(適用于默認(rèn) bridge 網(wǎng)絡(luò))
2.1、Bridge
- 含義:容器連接的 Linux 網(wǎng)橋設(shè)備名稱(如 docker0)。
典型值:
- 默認(rèn) bridge 網(wǎng)絡(luò):
docker0,自社區(qū)17.06 版本之后為空字符串。 - 其他情況:空字符串
""
注意:在自定義網(wǎng)絡(luò)或非 bridge 驅(qū)動下通常為空。這個字段僅在使用 bridge 網(wǎng)絡(luò)驅(qū)動時有意義,且主要反映默認(rèn) bridge 網(wǎng)絡(luò)的行為。
存儲位置:它是 NetworkSettings 的頂層字段,屬于歷史遺留設(shè)計,現(xiàn)代 Docker 更推薦通過 Networks 對象獲取網(wǎng)絡(luò)信息。
2.2、SandboxID
- 含義:容器網(wǎng)絡(luò)命名空間(network namespace)的唯一 ID。
- 用途:Docker 內(nèi)部用于隔離容器網(wǎng)絡(luò)棧。
- 關(guān)聯(lián):與 SandboxKey 配合使用。
- 宿主機對應(yīng)文件:/var/run/docker/netns/$SandboxID ,即為SandboxKey
SandboxID 文件使用:
進(jìn)入容器的網(wǎng)絡(luò)命名空間(調(diào)試用)使用 nsenter 命令:
# 進(jìn)入網(wǎng)絡(luò)命名空間并執(zhí)行命令 sudo nsenter --net=/var/run/docker/netns/$SANDBOX_ID ip addr sudo nsenter --net=/var/run/docker/netns/$SANDBOX_ID iptables -L ? 這是調(diào)試容器網(wǎng)絡(luò)問題(如 DNS、路由、iptables 規(guī)則)的最直接方式。
查看命名空間類型
# 查看文件系統(tǒng)類型 stat -f -c %T /var/run/docker/netns/$SANDBOX_ID # 輸出: nsfs (表示 network namespace filesystem)
示例
$ docker inspect 4e78a7993616 | jq '.[0].NetworkSettings.SandboxID'
"c8d35d6aee1efcd69d835b22476ab5fa3de6c185136570b4fec6c355f4923479"
$ sudo nsenter --net=/var/run/docker/netns/c8d35d6aee1e ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
950: eth0@if951: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:08 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.8/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
$ sudo nsenter --net=/var/run/docker/netns/c8d35d6aee1e iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
# 測試 DNS 解析
$ sudo nsenter --net=/var/run/docker/netns/c8d35d6aee1e cat /etc/resolv.conf
options timeout:2 attempts:3 rotate single-request-reopen
nameserver 10.101.0.1
nameserver 10.101.0.17
nameserver 10.101.0.33
$ stat -f -c %T /var/run/docker/netns/c8d35d6aee1e
UNKNOWN (0x6e736673)
容器停止后還能找到 SandboxID 文件嗎?
不能。Docker 在容器停止時會自動刪除 /var/run/docker/netns/<SandboxID> 文件。
2.3、HairpinMode
- 含義:是否啟用 發(fā)夾模式(Hairpin NAT)。
- 作用:允許容器通過宿主機 IP 訪問自己暴露的端口(例如容器內(nèi) curl http://宿主機IP:8080 能訪問到自己)。
典型值:
- true:啟用(常見于舊版 Docker 或特定配置)
- false:禁用(默認(rèn))
底層實現(xiàn):通過 iptables 的 hairpin nat 規(guī)則。
2.4、LinkLocalIPv6Address 和 LinkLocalIPv6PrefixLen
- 含義:容器的 IPv6 鏈路本地地址(類似 IPv4 的 169.254.x.x)。
- 格式:fe80::/64
- 用途:僅用于同一鏈路(如同一宿主機)內(nèi)的通信。
- 注意:Docker 默認(rèn)禁用 IPv6,故通常為空。更多相關(guān)內(nèi)容查看參考文檔
2.5、Ports
- 含義:端口映射(Port Binding) 配置,即 -p 或 --publish 參數(shù)的效果。
- 結(jié)構(gòu):
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8080"
}
]
字段說明:
- 80/tcp:容器內(nèi)部監(jiān)聽的協(xié)議/端口
- HostIp:綁定到宿主機的 IP(0.0.0.0 表示所有接口)
- HostPort:宿主機暴露的端口
多映射:一個容器端口可映射到多個宿主機端口(數(shù)組形式)。
示例:docker run -p 8080:80 -p 8081:80 nginx → "80/tcp" 數(shù)組有兩個元素。
2.6、SandboxKey
- 含義:容器網(wǎng)絡(luò)命名空間在宿主機上的文件路徑。
- 用途:可通過 nsenter 進(jìn)入該網(wǎng)絡(luò)命名空間調(diào)試:
nsenter --net=/var/run/docker/netns/71132bcfbb0f ip addr
2.7、SecondaryIPAddresses / SecondaryIPv6Addresses
- 含義:容器的輔助 IP 地址(可手動添加)。
- 典型值:null(除非顯式配置)
- 用途:高級網(wǎng)絡(luò)場景(如多 IP 綁定)。
2.8、EndpointID
- 含義:容器在默認(rèn) bridge 網(wǎng)絡(luò)中的端點(endpoint)唯一 ID。
- 注意:在 Networks 對象中每個網(wǎng)絡(luò)都有自己的 EndpointID。
2.9、Gateway
- 含義:容器默認(rèn)網(wǎng)關(guān) IP(通常是 Docker 網(wǎng)橋的 IP)。
典型值:
- 默認(rèn) bridge:172.17.0.1
- 自定義 bridge:如 172.18.0.1
2.10、IPAddress
- 含義:容器在默認(rèn)網(wǎng)絡(luò)中的 IPv4 地址。
- 注意:僅在默認(rèn) bridge 網(wǎng)絡(luò)下有效;自定義網(wǎng)絡(luò)中應(yīng)看 Networks..IPAddress。
2.11、IPPrefixLen
- 含義:IP 地址的子網(wǎng)掩碼長度(CIDR 表示法)。
- 示例:16 → 子網(wǎng)掩碼 255.255.0.0,網(wǎng)絡(luò)范圍 172.17.0.0/16
2.12、MacAddress
- 含義:容器虛擬網(wǎng)卡的 MAC 地址。
- 生成規(guī)則:Docker 自動生成,通常以 02:42 開頭(避免與物理 MAC 沖突)。
2.13、IPv6 相關(guān)字段(GlobalIPv6Address, GlobalIPv6PrefixLen, IPv6Gateway)
- 含義:全局 IPv6 地址、前綴長度、網(wǎng)關(guān)。
- 注意:Docker 默認(rèn)禁用 IPv6,需在 daemon.json 中啟用。
三、Networks 對象詳解(推薦使用)
容器可連接多個網(wǎng)絡(luò),Networks 是一個 Map,鍵為網(wǎng)絡(luò)名稱(如 “bridge”),值為該網(wǎng)絡(luò)的配置。
3.1、IPAMConfig
- 含義:IP 地址管理配置(如靜態(tài) IP 指定)。
- 示例(如果指定了 --ip):
"IPAMConfig": {
"IPv4Address": "172.18.0.100"
}
3.2、Links
- 含義:容器鏈接(legacy feature,已廢棄)。
- 歷史:–link 參數(shù)創(chuàng)建的依賴關(guān)系。
3.3、Aliases
- 含義:在該網(wǎng)絡(luò)中的DNS 別名。
- 用途:其他容器可通過別名訪問本容器。
- 設(shè)置方式:docker run --network-alias myapp …
3.4、NetworkID
- 含義:Docker 網(wǎng)絡(luò)的唯一 ID(對應(yīng) docker network ls 的 ID)。
3.5、EndpointID
- 含義:容器在該網(wǎng)絡(luò)中的端點 ID(與頂層 EndpointID 在默認(rèn)網(wǎng)絡(luò)下相同)。
3.6、Gateway, IPAddress, IPPrefixLen, MacAddress
- 含義:同頂層字段,但僅針對當(dāng)前網(wǎng)絡(luò)。
- ? 這是獲取容器 IP 的正確方式(尤其在多網(wǎng)絡(luò)場景)。
3.7、DriverOpts
- 含義:網(wǎng)絡(luò)驅(qū)動的額外選項(如 host-local IPAM 的參數(shù))。
3.8、Time
- 含義:內(nèi)部時間戳(通常無實際意義)。
3.9、SkipResolver
- 含義:是否跳過 Docker 內(nèi)置 DNS 解析器(用于自定義 DNS 場景)。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker compose自定義網(wǎng)絡(luò)實現(xiàn)固定容器ip地址
這篇文章主要介紹了docker compose自定義網(wǎng)絡(luò)實現(xiàn)固定容器ip地址,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
docker鏡像的拉取登陸上傳及保存等相關(guān)使用命令
這篇文章主要為大家介紹了docker鏡像的拉取登陸上傳及保存等相關(guān)使用命令,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
docker nginx 定時腳本保存30天日志信息的實現(xiàn)
本文介紹了docker nginx 定時腳本保存30天日志信息,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2026-01-01
Docker部署Laravel應(yīng)用的實現(xiàn)示例
這篇文章主要介紹了Docker部署Laravel應(yīng)用的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

