?
本文檔使用 php中文網(wǎng)手冊(cè) 發(fā)布
本節(jié)中的信息解釋如何自定義 Docker 默認(rèn)橋。這是一個(gè)bridge
網(wǎng)絡(luò)名bridge
安裝 Docker 時(shí)自動(dòng)創(chuàng)建。
注意:通過(guò) Docker 網(wǎng)絡(luò)功能,您可以創(chuàng)建除默認(rèn)網(wǎng)橋以外的用戶(hù)定義網(wǎng)絡(luò)。
默認(rèn)情況下,Docker 服務(wù)器創(chuàng)建并配置主機(jī)系統(tǒng)的docker0
一個(gè)稱(chēng)為的網(wǎng)絡(luò)接口docker0
,它是一個(gè)以太網(wǎng)橋設(shè)備。如果您在啟動(dòng)容器時(shí)未指定其他網(wǎng)絡(luò),則容器將連接到網(wǎng)橋,并且來(lái)自和去往容器的所有流量都會(huì)通過(guò)網(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ù)包長(zhǎng)度默認(rèn)為1500字節(jié)。
您可以使用該dockerd
命令的標(biāo)志來(lái)配置默認(rèn)橋接網(wǎng)絡(luò)的設(shè)置。但是,配置 Docker 守護(hù)進(jìn)程的推薦方式是使用daemon.json
位于/etc/docker/
Linux上的文件。如果該文件不存在,請(qǐng)創(chuàng)建它。您可以指定一個(gè)或多個(gè)以下設(shè)置來(lái)配置默認(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"]}
在對(duì)daemon.json
文件進(jìn)行更改后重新啟動(dòng) Docker 。
相同的選項(xiàng)作為標(biāo)志顯示dockerd
,并分別給出解釋?zhuān)?/p>
--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 表示法來(lái)限制子網(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
對(duì)于您的容器,將從192.168.1.0/24
子網(wǎng)中包含的前半部分地址中選擇 IP。
--mtu=BYTES
:覆蓋最大數(shù)據(jù)包長(zhǎng)度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)控制它們?cè)谀睦锫酚闪髁?。適用于使用--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
。
一旦啟動(dòng)并運(yùn)行了一個(gè)或多個(gè)容器,您可以docker0
通過(guò)brctl
在主機(jī)上運(yùn)行命令并查看interfaces
輸出的列來(lái)確認(rèn)Docker 已將其正確連接到網(wǎng)橋。此示例顯示了docker0
連接了兩個(gè)容器的橋:
$ 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)建新容器時(shí)都會(huì)使用以太網(wǎng)網(wǎng)橋設(shè)置。每次你docker run
新建一個(gè)容器時(shí),Docker 會(huì)從橋上可用的范圍中選擇一個(gè)空閑的 IP 地址,并eth0
用該 IP 地址和網(wǎng)橋的網(wǎng)絡(luò)掩碼來(lái)配置容器的接口。橋上的 Docker 主機(jī)自己的IP地址被用作每個(gè)容器到達(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
請(qǐng)記住,Docker 主機(jī)不會(huì)愿意將容器數(shù)據(jù)包轉(zhuǎn)發(fā)到 Internet 上,除非其ip_forward
系統(tǒng)設(shè)置為1
- 請(qǐng)參閱與外部通信以了解詳細(xì)信息的部分。