我的服务器VLAN为10.101.10.0/24,我的Docker主机为10.101.10.31。如何在Docker主机(VM)上配置网桥,以便所有容器都可以直接连接到我的LAN网络,而无需在默认的172.17.0.0/16上重定向端口?我试过搜索但是到目前为止我发现的所有声音都导致失去了SSH会话,我不得不从控制台进入虚拟机以恢复我所做的步骤。
答案 0 :(得分:10)
有多种方法可以做到这一点。我最成功的两个是将子网路由到docker网桥并在主机LAN上使用自定义网桥。
这样做的好处是只需要本机docker工具来配置docker。它有一个缺点,需要添加到您的网络的路由,这是在码头工人的汇款之外,通常是手动的(或依赖于#34;网络人员#34;)。
启用IP转发
/etc/sysctl.conf: net.ipv4.ip_forward = 1
sysctl -p /etc/sysctl.conf
在VM网络上创建一个包含新子网的docker bridge,例如10.101.11.0/24
docker network create routed0 --subnet 10.101.11.0/24
告诉网络其余部分10.101.11.0/24
应通过10.101.10.X
路由,其中X是您的泊坞主机的IP。这是外部路由器/网关/"网络人员"配置。在Linux网关上,您可以添加以下路由:
ip route add 10.101.11.0/24 via 10.101.10.31
使用10.101.11.0/24地址在网桥上创建容器。
docker run --net routed0 busybox ping 10.101.10.31
docker run --net routed0 busybox ping 8.8.8.8
然后你完成了。容器具有可路由的IP地址。 如果您对网络方面没有问题,或者在网络上运行类似RIP / OSPF的程序或负责路由的Calico那么这是最干净的解决方案。
这样做的好处是不需要任何外部网络设置。缺点是docker主机上的设置更复杂。主界面在启动时需要此桥接器,因此它不是本机docker network
设置。需要Pipework或手动容器设置。
使用VM可以使这更加复杂,因为您通过主{VM}接口will need additional "Promiscuous" config first to allow this to work运行额外的MAC地址接口。
桥接接口的永久网络配置因发行版而异。以下命令概述了如何设置界面,并在重新启动后消失。在更改主网络接口配置时,您将需要控制台访问或单独进入VM的路径。
在主机上创建一个网桥。
ip link add name shared0 type bridge
ip link set shared0 up
在/etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=shared0
TYPE=Bridge
BOOTPROTO=static
DNS1=8.8.8.8
GATEWAY=10.101.10.1
IPADDR=10.101.10.31
NETMASK=255.255.255.0
ONBOOT=yes
将主要接口连接到网桥,通常是eth0
ip link set eth0 up
ip link set eth0 master shared0
在/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
IPV6INIT=no
USERCTL=no
BRIDGE=shared0
重新配置您的网桥以获得eth0
的ip配置。
ip addr add dev shared0 10.101.10.31/24
ip route add default via 10.101.10.1
将容器附加到具有10.101.10.0/24
地址的桥接器。
CONTAINERID=$(docker run -d --net=none busybox sleep 600)
pipework shared1 $CONTAINERID 10.101.10.43/24@10.101.10.Y
或者在容器内使用DHCP客户端
pipework shared1 $CONTAINERID dhclient
此后,Docker添加了一个名为macvlan
的网络驱动程序,可以使容器看起来直接连接到主机所在的物理网络。容器连接到主机上的parent
接口。
docker network create -d macvlan \
--subnet=10.101.10.0/24 \
--gateway=10.101.10.1 \
-o parent=eth0 pub_net
这将遇到网络和接口需要promiscuous with regard mac addresses的相同VM /软交换问题。