?
This document uses PHP Chinese website manual Release
本節(jié)中的信息解釋如何自定義 Docker 默認(rèn)橋。這是一個bridge
網(wǎng)絡(luò)名bridge
安裝 Docker 時自動創(chuàng)建。
注意:通過 Docker 網(wǎng)絡(luò)功能,您可以創(chuàng)建除默認(rèn)網(wǎng)橋以外的用戶定義網(wǎng)絡(luò)。
默認(rèn)情況下,Docker 服務(wù)器創(chuàng)建并配置主機(jī)系統(tǒng)的docker0
一個稱為的網(wǎng)絡(luò)接口docker0
,它是一個以太網(wǎng)橋設(shè)備。如果您在啟動容器時未指定其他網(wǎng)絡(luò),則容器將連接到網(wǎng)橋,并且來自和去往容器的所有流量都會通過網(wǎng)橋流向 Docker 守護(hù)程序,
Docker 守護(hù)程序?qū)⒋砣萜魈幚砺酚伞?/p>
Docker docker0
使用 IP 地址,網(wǎng)絡(luò)掩碼和 IP 分配范圍進(jìn)行配置。連接到默認(rèn)網(wǎng)橋的容器在此范圍內(nèi)分配 IP 地址。某些默認(rèn)設(shè)置適用于默認(rèn)網(wǎng)橋,除非您另行指定。例如,默認(rèn)的最大傳輸單元(MTU)或容器允許的最大數(shù)據(jù)包長度默認(rèn)為1500字節(jié)。
您可以使用該dockerd
命令的標(biāo)志來配置默認(rèn)橋接網(wǎng)絡(luò)的設(shè)置。但是,配置 Docker 守護(hù)進(jìn)程的推薦方式是使用daemon.json
位于/etc/docker/
Linux上的文件。如果該文件不存在,請創(chuàng)建它。您可以指定一個或多個以下設(shè)置來配置默認(rèn)橋接網(wǎng)絡(luò):
{ "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
文件進(jìn)行更改后重新啟動 Docker 。
相同的選項(xiàng)作為標(biāo)志顯示dockerd
,并分別給出解釋:
--bip=CIDR
:docker0
使用標(biāo)準(zhǔn) CIDR 表示法為橋提供特定的IP地址和網(wǎng)絡(luò)掩碼。例如:192.168.1.5/24
。
--fixed-cidr=CIDR
并且--fixed-cidr-v6=CIDRv6
:docker0
使用標(biāo)準(zhǔn)的 CIDR 表示法來限制子網(wǎng)的IP范圍。例如:172.16.1.0/28
。此范圍必須是固定IP的IPv4范圍10.20.0.0/16
,并且必須是網(wǎng)橋 IP 范圍的子集(docker0
或使用set --bridge
)。例如,--fixed-cidr=192.168.1.0/25
對于您的容器,將從192.168.1.0/24
子網(wǎng)中包含的前半部分地址中選擇 IP。
--mtu=BYTES
:覆蓋最大數(shù)據(jù)包長度docker0
。
--default-gateway=Container default Gateway IPV4 address
和--default-gateway-v6=Container default gateway IPV6 address
:指定連接到docker0
網(wǎng)橋的容器的默認(rèn)網(wǎng)關(guān),默認(rèn)網(wǎng)關(guān)控制它們在哪里路由流量。適用于使用--bip
和--fixed-cidr
標(biāo)志設(shè)置的地址。例如,你可以配置--fixed-cidr=172.17.2.0/24
和default-gateway=172.17.1.1
。
--dns=[]
:要使用的 DNS 服務(wù)器。例如:--dns=172.17.2.10
。
一旦啟動并運(yùn)行了一個或多個容器,您可以docker0
通過brctl
在主機(jī)上運(yùn)行命令并查看interfaces
輸出的列來確認(rèn)Docker 已將其正確連接到網(wǎng)橋。此示例顯示了docker0
連接了兩個容器的橋:
$ sudo brctl show bridge name bridge id STP enabled interfaces docker0 8000.3a1d7362b4ee no veth65f9 vethdda6
如果該brctl
命令未安裝在您的 Docker 主機(jī)上,那么在
Ubuntu 上您應(yīng)該可以運(yùn)行sudo apt-get install bridge-utils
以安裝它。
最后,docker0
每次創(chuàng)建新容器時都會使用以太網(wǎng)網(wǎng)橋設(shè)置。每次你docker run
新建一個容器時,Docker 會從橋上可用的范圍中選擇一個空閑的 IP 地址,并eth0
用該 IP 地址和網(wǎng)橋的網(wǎng)絡(luò)掩碼來配置容器的接口。橋上的 Docker 主機(jī)自己的IP地址被用作每個容器到達(dá) Internet 其余部分的默認(rèn)網(wǎng)關(guān)。
# 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 主機(jī)不會愿意將容器數(shù)據(jù)包轉(zhuǎn)發(fā)到 Internet 上,除非其ip_forward
系統(tǒng)設(shè)置為1
- 請參閱與外部通信以了解詳細(xì)信息的部分。