?
? ????? PHP ??? ???? ??? ?? ??
本節(jié)中的信息解釋如何自定義 Docker 默認橋。這是一個bridge
網絡名bridge
安裝 Docker 時自動創(chuàng)建。
注意:通過 Docker 網絡功能,您可以創(chuàng)建除默認網橋以外的用戶定義網絡。
默認情況下,Docker 服務器創(chuàng)建并配置主機系統(tǒng)的docker0
一個稱為的網絡接口docker0
,它是一個以太網橋設備。如果您在啟動容器時未指定其他網絡,則容器將連接到網橋,并且來自和去往容器的所有流量都會通過網橋流向 Docker 守護程序,
Docker 守護程序將代表容器處理路由。
Docker docker0
使用 IP 地址,網絡掩碼和 IP 分配范圍進行配置。連接到默認網橋的容器在此范圍內分配 IP 地址。某些默認設置適用于默認網橋,除非您另行指定。例如,默認的最大傳輸單元(MTU)或容器允許的最大數據包長度默認為1500字節(jié)。
您可以使用該dockerd
命令的標志來配置默認橋接網絡的設置。但是,配置 Docker 守護進程的推薦方式是使用daemon.json
位于/etc/docker/
Linux上的文件。如果該文件不存在,請創(chuàng)建它。您可以指定一個或多個以下設置來配置默認橋接網絡:
{ "bip": "192.168.1.5/24", "fixed-cidr": "10.20.0.0/16", "fixed-cidr-v6": "2001:db8::/64", "mtu": 1500, "default-gateway": "10.20.1.1", "default-gateway-v6": "2001:db8:abcd::89", "dns": ["10.20.1.2","10.20.1.3"]}
在對daemon.json
文件進行更改后重新啟動 Docker 。
相同的選項作為標志顯示dockerd
,并分別給出解釋:
--bip=CIDR
:docker0
使用標準 CIDR 表示法為橋提供特定的IP地址和網絡掩碼。例如:192.168.1.5/24
。
--fixed-cidr=CIDR
并且--fixed-cidr-v6=CIDRv6
:docker0
使用標準的 CIDR 表示法來限制子網的IP范圍。例如:172.16.1.0/28
。此范圍必須是固定IP的IPv4范圍10.20.0.0/16
,并且必須是網橋 IP 范圍的子集(docker0
或使用set --bridge
)。例如,--fixed-cidr=192.168.1.0/25
對于您的容器,將從192.168.1.0/24
子網中包含的前半部分地址中選擇 IP。
--mtu=BYTES
:覆蓋最大數據包長度docker0
。
--default-gateway=Container default Gateway IPV4 address
和--default-gateway-v6=Container default gateway IPV6 address
:指定連接到docker0
網橋的容器的默認網關,默認網關控制它們在哪里路由流量。適用于使用--bip
和--fixed-cidr
標志設置的地址。例如,你可以配置--fixed-cidr=172.17.2.0/24
和default-gateway=172.17.1.1
。
--dns=[]
:要使用的 DNS 服務器。例如:--dns=172.17.2.10
。
一旦啟動并運行了一個或多個容器,您可以docker0
通過brctl
在主機上運行命令并查看interfaces
輸出的列來確認Docker 已將其正確連接到網橋。此示例顯示了docker0
連接了兩個容器的橋:
$ sudo brctl show bridge name bridge id STP enabled interfaces docker0 8000.3a1d7362b4ee no veth65f9 vethdda6
如果該brctl
命令未安裝在您的 Docker 主機上,那么在
Ubuntu 上您應該可以運行sudo apt-get install bridge-utils
以安裝它。
最后,docker0
每次創(chuàng)建新容器時都會使用以太網網橋設置。每次你docker run
新建一個容器時,Docker 會從橋上可用的范圍中選擇一個空閑的 IP 地址,并eth0
用該 IP 地址和網橋的網絡掩碼來配置容器的接口。橋上的 Docker 主機自己的IP地址被用作每個容器到達 Internet 其余部分的默認網關。
# The network, as seen from a container $ docker run --rm -it alpine /bin/ash root@f38c87f2a42d:/# ip addr show eth024: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 32:6f:e0:35:57:91 brd ff:ff:ff:ff:ff:ff inet 172.17.0.3/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::306f:e0ff:fe35:5791/64 scope link valid_lft forever preferred_lft forever root@f38c87f2a42d:/# ip routedefault via 172.17.42.1 dev eth0172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.3root@f38c87f2a42d:/# exit
請記住,Docker 主機不會愿意將容器數據包轉發(fā)到 Internet 上,除非其ip_forward
系統(tǒng)設置為1
- 請參閱與外部通信以了解詳細信息的部分。