使用macvlan驱动程序时如何从同一网络上的不同主机访问容器

时间:2018-11-02 16:29:32

标签: docker docker-networking

我已经如下创建了我的macvlan网络:

docker network create -d macvlan -o parent=eth0 \
--subnet 192.168.1.0/24 \
--gateway 192.168.1.1 \
--ip-range 192.168.1.192/27 \
--aux-address 'host=192.168.1.223' \
 mynet

我按如下方式运行容器:

docker run --name nginx -d --net mynet nginx

容器的IP为192.168.1.192

我有两个主机,可以通过两种方式相互ping通:

主机A:192.168.1.98(运行Docker引擎的地方)

主机B:192.168.1.6

由于macvlan按照定义不允许主机到容器的通信,因此我创建了一个子接口,以允许这种通信:

ip link add mynet-shim link eth0 type macvlan  mode bridge

ip addr add 192.168.1.223/32 dev mynet-shim

ip link set mynet-shim up

ip route add 192.168.1.192/27 dev mynet-shim

运行时,我可以从主机A访问容器:

curl 192.168.1.192:80,我收到了Nginx默认的html

我还能够从主机A ping容器。

我运行docker logs nginx时说:

192.168.1.223 - - [02/Nov/2018:16:19:32 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"

因此它正在与mynet-shim子接口一起使用。

但是,我无法从主机B访问该容器,因为对容器的curlping命令都从主机B失败了,即使它与主机A在同一子网中,并且容器

在主机B上可能还缺少其他配置吗?

1 个答案:

答案 0 :(得分:0)

问题出在VMWare的网络设置上。

在VMWare ESXi 6.5(客户端版本1.2.3)上:

  1. 点击左侧窗格中的“网络”
  2. 点击“安全”
  3. 为“混杂模式”,“ MAC地址更改”和“伪造的传输”选择“接受”
  4. 保存

此后,我能够从同一网络上的另一台主机(即主机B)访问该容器