编辑:
此解决方案现已无用。从1.12版开始,Docker提供了两个网络驱动程序:macvlan和ipvlan。它们允许从LAN网络分配静态IP。。
寻找有相同问题的人后,我们采取了一种解决方法:
总结 :
- (V)LAN为192.168.1.0/24
- 默认网关(=路由器)为192.168.1.1
- 多个Docker主机
- 注意:我们有两个NIC:eth0和eth1(专用于Docker)
我们想要什么 :
我们希望在192.168.1.0/24网络中拥有带有ip的容器(例如计算机),而没有任何NAT / PAT /转换/端口转发/等。
问题
这样做时:
network create --subnet 192.168.1.0/24 --gateway 192.168.1.1 homenet
我们可以为容器提供所需的IP, 但是 docker(
br-[a-z0-9]+)创建的网桥将具有IP 192.168.1.1,这就是我们的路由器。
解
1.设置Docker网络
使用
DefaultGatewayIPv4参数:
docker network create --subnet 192.168.1.0/24 --aux-address "DefaultGatewayIPv4=192.168.1.1" homenet
默认情况下,Docker会将
br-[a-z0-9]+第一个IP
提供给网桥接口(),该IP可能已被另一台机器使用。解决方案是使用
--gateway参数告诉docker分配任意IP(可用):
docker network create --subnet 192.168.1.0/24 --aux-address "DefaultGatewayIPv4=192.168.1.1" --gateway=192.168.1.200 homenet
我们可以通过添加
-o com.docker.network.bridge.name=br-home-net到上一个命令来指定网桥名称。
2.架桥!
现在我们有了一个
br-[a-z0-9]+由Docker创建的网桥()。我们需要将其桥接到物理接口(在我的情况下,我必须连接到NIC,所以我为此使用eth1):
brctl addif br-home-net eth1
3.删除网桥IP
现在我们可以从网桥中删除IP地址,因为我们不需要一个IP地址:
ip a del 192.168.1.200/24 dev br-home-net
192.168.1.200由于我们不使用该IP,因此可以将其用作多个Docker主机上的桥接。



