©
本文档使用 PHP中文网手册 发布
本节中的信息解释如何自定义 Docker 默认桥。这是一个bridge
网络名bridge
安装 Docker 时自动创建。
注意:通过 Docker 网络功能,您可以创建除默认网桥以外的用户定义网络。
默认情况下,Docker 服务器创建并配置主机系统的docker0
一个称为的网络接口docker0
,它是一个以太网桥设备。如果您在启动容器时未指定其他网络,则容器将连接到网桥,并且来自和去往容器的所有流量都会通过网桥流向 Docker 守护程序,
Docker 守护程序将代表容器处理路由。
Docker docker0
使用 IP 地址,网络掩码和 IP 分配范围进行配置。连接到默认网桥的容器在此范围内分配 IP 地址。某些默认设置适用于默认网桥,除非您另行指定。例如,默认的最大传输单元(MTU)或容器允许的最大数据包长度默认为1500字节。
您可以使用该dockerd
命令的标志来配置默认桥接网络的设置。但是,配置 Docker 守护进程的推荐方式是使用daemon.json
位于/etc/docker/
Linux上的文件。如果该文件不存在,请创建它。您可以指定一个或多个以下设置来配置默认桥接网络:
{ "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
每次创建新容器时都会使用以太网网桥设置。每次你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 主机不会愿意将容器数据包转发到 Internet 上,除非其ip_forward
系统设置为1
- 请参阅与外部通信以了解详细信息的部分。