无法通过macvlan网络

时间:2017-05-18 13:19:27

标签: docker networking macvlan

在我的Linux网络中,我无法通过专用的macvlan网络从他们运行的主机上访问我的docker容器。来自这个macvlan网络的所有其他连接都没问题。

所以基本上设置是:

DOCKER1       eth0  172.0.0.1 (default)
  |           eth1  10.0.0.1  (macvlan)
  CONTAINER1        10.0.0.11 (macvlan)

DOCKER2       eth0  172.0.0.2 (default)
  |           eth1  10.0.0.2  (macvlan)
  CONTAINER2        10.0.0.12 (macvlan)
  • 主机DOCKER1无法访问CONTAINER1
  • 主机DOCKER2无法访问CONTAINER2
  • 主机DOCKER1可以达到DOCKER2
  • 主机DOCKER1可以访问CONTAINER2
  • 主机DOCKER2可以达到DOCKER1
  • 主机DOCKER2可以到达CONTAINER1
  • 所有容器都可以相互接触
  • 物理网络中的所有其他设备都可以访问所有
  • 所有人都可以到达网关/互联网

如何让主机通过macvlan网络访问自己的容器?

我需要特定的应用程序才能通过此网络进行互动,因此使用docker exec无法解决我的问题;)。

2 个答案:

答案 0 :(得分:1)

如果没有外部交换机的特殊支持,主机无法与本地macvlan设备通信。参见例如this Red Hat documentation讨论了将macvlan设备用于虚拟机:

  

但是,当客户虚拟机配置为使用类型=' direct' macvtap等网络接口,尽管能够与网络上的其他guest虚拟机和其他外部主机通信,但guest虚拟机无法与自己的主机通信。

     

这种情况实际上不是错误 - 它是macvtap的定义行为。由于主机的物理以太网连接到macvtap网桥的方式,从转发到物理接口的客户端进入该网桥的流量不能被反弹回主机的IP堆栈。此外,来自主机IP地址的发送到物理接口的流量不能被反弹回macvtap网桥以转发给访客。

答案 1 :(得分:0)

您可以执行以下操作:

ip link add foobar link enp7s0 type macvlan mode bridge
ip addr add 192.168.9.252/32 dev foobar
ip link set foobar up
ip route add 192.168.9.228/32 dev foobar

位置:

enp7s0-您的物理适配器的名称

192.168.9.252/32-您网络上的全新IP

192.168.9.228/32-使用macvlan的容器IP

请注意,重启后将无法生存,因此您需要编写脚本来运行每次重启,或使用其他方法使其持久化