Docker的macvlannetworking,无法访问互联网

我有一个具有多个IP地址的专用服务器,一些IP具有关联的MAC地址,而另一些IP地址(在子网中)没有MAC地址。 我创build了docker macvlannetworking使用:

docker network create -d macvlan -o macvlan_mode=bridge --subnet=188.40.76.0/26 --gateway=188.40.76.1 -o parent=eth0 macvlan_bridge 

我有IP:88.99.102.115与MAC:00:50:56:00:60:42。 创build一个容器使用:

 docker run --name cont1 --net=macvlan_bridge --ip=88.99.102.115 --mac-address 00:50:56:00:60:42 -itd nginx 

这工作,我可以从外部访问nginx在该ip地址托pipe。

与没有MAC地址的IP和网关不在子网的情况。

子网:88.99.114.16/28,网关:88.99.102.103

无法使用以下方式创buildnetworking

 docker network create -d macvlan -o macvlan_mode=bridge --subnet=88.99.114.16/28 --gateway=88.99.102.103 -o parent=eth0 mynetwork 

引发错误:

 no matching subnet for gateway 88.99.102.103 

尝试增加子网范围包括网关:

 docker network create -d macvlan -o macvlan_mode=bridge --subnet=88.99.0.0/16 --gateway=88.99.102.103 -o parent=eth0 mynetwork 

networking创build,然后启动nginx容器使用“mynetwork”,以及我没有mac地址为88.99.114.18所以使用一些随机mac地址40:1c:0f:bd:a1:d2。

 docker run --name cont1 --net=mynetwork --ip=88.99.114.18 --mac-address 40:1c:0f:bd:a1:d2 -itd nginx 

无法到达nginx(88.99.102.115)。

  1. 如果我的网关不在我的子网中,如何创build一个macvlan dockernetworking?
  2. 当我只有IP地址但没有MAC地址时,如何使用macvlannetworking运行容器?

我没有太多的networking知识,如果你详细解释,这将是非常有帮助的。

我的/ etc / network / interfaces文件:

 ### Hetzner Online GmbH - installimage # Loopback device: auto lo iface lo inet loopback iface lo inet6 loopback # device: eth0 auto eth0 iface eth0 inet static address 88.99.102.103 netmask 255.255.255.192 gateway 88.99.102.65 # default route to access subnet up route add -net 88.99.102.64 netmask 255.255.255.192 gw 88.99.102.65 eth0 iface eth0 inet6 static address 2a01:4f8:221:1266::2 netmask 64 gateway fe80::1 

Solutions Collecting From Web of "Docker的macvlannetworking,无法访问互联网"

您可能要先阅读简单的路由概念或子网和路由

如果我的网关不在我的子网中,如何创建一个macvlan docker网络?

网关地址必须与接口在同一个子网上。 要使用这个新的子网,您需要使用其中一个IP地址,并将其作为网关分配给主机上的某个位置。

子网路由到网桥。

从托管屏幕截图,88.99.114.16/28子网已经设置为通过您的主机88.99.102.103路由。 如果您希望Docker使用子网中的其余IP地址,则需要在主机的某个位置创建一个接口以用作网关。

为Docker创建一个桥接网络,网桥将被分配网关地址88.99.114.17

 docker network create \ --driver=bridge \ --subnet 88.99.114.16/28 \ --gateway=88.99.114.17 \ name0 

您可能还需要启用IP转发路由才能工作。 在/etc/sysctl.conf配置ip转发:

 net.ipv4.ip_forward = 1 

并应用新的设置

 sysctl -p /etc/sysctl.conf 

然后在你的路由网络的新桥上运行一个容器应该能够访问网关和互联网

 docker run --net=name0 --rm busybox \ sh -c "ip ad sh && ping -c 4 88.99.114.17 && wget api.ipify.org" 

您可能需要允许访问iptables中的子网,具体取决于您的默认FORWARD策略

 iptables -I DOCKER -d 88.99.114.16/28 -j ACCEPT 

子网上的服务可以从外部访问

 docker run --net=name0 busybox \ nc -lp 80 -e echo -e "HTTP/1.0 200 OK\nContent-Length: 3\n\nHi\n" 

然后在外面

 ○→ ping -c 2 88.99.114.18 PING 88.99.114.18 (88.99.114.18): 56 data bytes 64 bytes from 88.99.114.18: icmp_seq=0 ttl=63 time=0.527 ms 64 bytes from 88.99.114.18: icmp_seq=1 ttl=63 time=0.417 ms --- 88.99.114.18 ping statistics --- 2 packets transmitted, 2 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.417/0.472/0.527/0.055 ms ○→ curl 88.99.114.18 Hi 

不需要macvlan接口映射。

当我只有IP地址但没有MAC地址时,如何使用macvlan网络运行容器?

macvlan用于将物理/主机接口映射到容器中。 由于您没有这些地址的物理接口,因此很难将其映射到容器中。