我已经如下创建了我的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访问该容器,因为对容器的curl
和ping
命令都从主机B失败了,即使它与主机A在同一子网中,并且容器
在主机B上可能还缺少其他配置吗?
答案 0 :(得分:0)
问题出在VMWare的网络设置上。
在VMWare ESXi 6.5(客户端版本1.2.3)上:
此后,我能够从同一网络上的另一台主机(即主机B)访问该容器