Ero*_*oji 2 networking containers bridge docker
我的服务器VLAN为10.101.10.0/24,我的Docker主机为10.101.10.31.如何在Docker主机(VM)上配置网桥,以便所有容器都可以直接连接到我的LAN网络,而无需在默认的172.17.0.0/16上重定向端口?我试过搜索但是到目前为止我发现的所有声音都导致失去了SSH会话,我不得不从控制台进入VM以恢复我所做的步骤.
Mat*_*att 12
有多种方法可以做到这一点.我最成功的两个是将子网路由到docker网桥并在主机LAN上使用自定义网桥.
这样做的好处是只需要本机docker工具来配置docker.它有一个缺点,需要添加到您的网络的路由,这是在dockers汇款之外,通常是手动(或依赖于"网络人").
启用IP转发
/etc/sysctl.conf: net.ipv4.ip_forward = 1
sysctl -p /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)
比如说,在VM网络上创建一个带有新子网的docker bridge 10.101.11.0/24
docker network create routed0 --subnet 10.101.11.0/24
Run Code Online (Sandbox Code Playgroud)告诉10.101.11.0/24
应该通过10.101.10.X
其中X是您的泊坞主机IP的IP 路由到网络的其余部分.这是外部路由器/网关/"网络人"配置.在Linux网关上,您可以添加以下路由:
ip route add 10.101.11.0/24 via 10.101.10.31
Run Code Online (Sandbox Code Playgroud)使用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
Run Code Online (Sandbox Code Playgroud)然后你完成了.容器具有可路由的IP地址.如果你对网络方面没问题,或者在网络上运行类似RIP/OSPF的东西或者负责路由的Calico,那么这是最干净的解决方案.
这样做的好处是不需要任何外部网络设置.缺点是docker主机上的设置更复杂.主接口在启动时需要此桥接器,因此它不是本机docker network
设置.需要管道或手动容器设置.
使用VM可以使这更加复杂,因为您在主VM的接口上运行额外的MAC地址接口,这将需要额外的"混杂"配置才能使其正常工作.
桥接接口的永久网络配置因发行版而异.以下命令概述了如何设置界面,并在重新启动后消失.在更改主网络接口配置时,您将需要控制台访问或单独进入VM的路径.
在主机上创建一个桥.
ip link add name shared0 type bridge
ip link set shared0 up
Run Code Online (Sandbox Code Playgroud)
在 /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
Run Code Online (Sandbox Code Playgroud)通常将主接口连接到网桥 eth0
ip link set eth0 up
ip link set eth0 master shared0
Run Code Online (Sandbox Code Playgroud)
在 /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
IPV6INIT=no
USERCTL=no
BRIDGE=shared0
Run Code Online (Sandbox Code Playgroud)将网桥重新配置为具有eth0
ip配置.
ip addr add dev shared0 10.101.10.31/24
ip route add default via 10.101.10.1
Run Code Online (Sandbox Code Playgroud)将容器连接到带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
Run Code Online (Sandbox Code Playgroud)
或者在容器内使用DHCP客户端
pipework shared1 $CONTAINERID dhclient
Run Code Online (Sandbox Code Playgroud)Docker之后添加了一个名为的网络驱动程序macvlan
,可以使容器看起来直接连接到主机所在的物理网络.容器连接到parent
主机上的接口.
docker network create -d macvlan \
--subnet=10.101.10.0/24 \
--gateway=10.101.10.1 \
-o parent=eth0 pub_net
Run Code Online (Sandbox Code Playgroud)
这将遭受相同的VM /软交换问题,其中网络和接口将需要与mac地址混杂.
归档时间: |
|
查看次数: |
8137 次 |
最近记录: |