$ sudo brctl show bridge name bridge id STP enabled interfaces docker0 8000.3a1d7362b4ee no veth65f9 vethdda6 interfaces:这列列出了所有连接到该桥接设备的网络接口。在这个例子中,有两个接口:“veth65f9”和“vethdda6”。这些都是虚拟以太网接口,Docker为每个容器创建了一个,并连接到docker0桥接器。
每次创建一个新容器的时候,Docker 从可用的地址段中选择一个空闲的 IP 地址分配给容器的 eth0 端口。使用本地主机上 docker0 接口的 IP 作为所有容器的默认网关
自定义网桥
除了默认的 docker0 网桥,用户也可以指定网桥来连接各个容器
1 2 3
$ sudo systemctl stop docker $ sudo ip link set dev docker0 down $ sudo brctl delbr docker0
然后创建一个网桥 bridge0
1 2 3
$ sudo brctl addbr bridge0 $ sudo ip addr add 192.168.5.1/24 dev bridge0 $ sudo ip link set dev bridge0 up
$ sudo ip link set A netns 2989 $ sudo ip netns exec 2989 ip addr add 10.1.1.1/32 dev A $ sudo ip netns exec 2989 ip link set A up $ sudo ip netns exec 2989 ip route add 10.1.1.2/32 dev A
sudo ip netns exec 2989 <命令> 这个命令有很实际的用途。主要是用来在特定的网络命名空间中执行指定的命令。注解:网络命名空间是Linux命名空间的一种,它提供了隔离网络栈的功能。 具体来说,每一个网络命名空间都有独立的网络设备、IP地址、路由表、防火墙规则等网络栈信息。当一个进程在某个网络命名空间中运行时,它只能看到和操作这个网络命名空间中的网络资源,就像这个网络命名空间是一个独立的网络环境一样。
$ sudo ip link set B netns 3004 $ sudo ip netns exec 3004 ip addr add 10.1.1.2/32 dev B $ sudo ip netns exec 3004 ip link set B up $ sudo ip netns exec 3004 ip route add 10.1.1.1/32 dev B