什么';docker的macvlan设置有什么问题?

什么';docker的macvlan设置有什么问题?,docker,networking,vlan,Docker,Networking,Vlan,我在学习。以下是我的设置: G192.168.1.1,网关(物理) W192.168.1.2,windows 10,以太网卡(物理版) V192.168.1.5,virtualbox+centos7,桥接网络 c1192.168.1.10,macnet中的docker容器 c2192.168.1.11,macnet中的docker容器 macnet由 docker network create-d macvlan--subnet=192.168.1.0/24--gateway=192.168.1

我在学习。以下是我的设置:

G
192.168.1.1,网关(物理)
W
192.168.1.2,windows 10,以太网卡(物理版)
V
192.168.1.5,virtualbox+centos7,桥接网络
c1
192.168.1.10,macnet中的docker容器

c2
192.168.1.11,macnet中的docker容器

macnet

docker network create-d macvlan--subnet=192.168.1.0/24--gateway=192.168.1.1-o parent=enp0s3 macnet

c1
c2

docker-run-it--net=macnet--ip=192.168.1.10-h=c1/alpine-java-bash

docker-run-it--net=macnet--ip=192.168.1.11-h=c2/alpine-java-bash

docker版本为17.06.0-ce

我期待下面的所有工作,但只有第一个工作(
->
表示ping):
c1
c2
OK
c1
V
Fail
c1
W
Fail
c1
-->
G
失败

以上步骤有什么问题吗


顺便问一下,有人能帮我创建标记“macvlan”和“ipvlan”吗?

我的设置和你的一样。我指的是一个VBox和两个运行在Ubuntu上的容器。我不知道你是否有特定的目的,或者只是测试docker网络。如果是后者,那么为什么不使用bridge作为驱动程序呢。 下面的命令为我创建了一个网络:

docker network create -d bridge -o parent=enp0s3 skynet
然后我用它创建了两个容器

~$ docker run -itd --net=skynet --name container2 myimage bash 
~$ docker run -itd --net=skynet --name container1 myimage bash
并检查了这两个容器可以相互ping,以及localhost和外部网络(如google.com或yahoo.com)

让我知道这是否有用


注意:对于你的问题,你的设置没有问题。如果驱动程序是macvlan,则预期您无法伸出容器。

这是预期的行为,因为您使用macvlan创建的网络在VM和macvlan网桥之间没有任何连接(默认情况下,docker以网桥模式创建macvlan网络)。您创建的容器C1和C2将其接口连接到MAVLAN网桥。这就是为什么C1和C2能够相互ping,但从VM(来宾)无法ping C1和C2,因此无法从主机ping

要从VM连接到容器C1和C2,请创建一个bridge类型的接口并分配一个ip。下面的命令:(这些命令可能有副作用。您可能会完全失去与VM的连接。如果您通过ssh连接,请确保您有两个与VM的接口,并且ssh与VM的接口在网络192.168.1.0/24中没有ip)

  • 删除网络192.168.1.0/24中具有ip的接口的ip
  • ip地址删除(接口的ip地址)开发(接口eg-eth0)
  • ip链路添加mymacvlan1链路(虚拟机接口名称如-eth0)类型macvlan模式网桥
  • ip链路设置mymacvlan1
  • ip地址添加192.168.1.20/24 dev mymacvlan1
  • ping您的容器-ping(c1ip)-I mymacvlan1
  • 请注意,这些更改不是永久启动的


    为了能够从主机ping,您需要确保虚拟机接口在virtual box虚拟机网络设置中的混杂模式为true。

    syknet
    与默认网络相同,但我希望类似于virtualbox的桥接网络。在这种情况下,不需要端口映射或看起来像单个主机。