2

我正在学习“使用 macvlan 的码头工人”。以下是我的设置:

G192.168.1.1,网关(物理)
W192.168.1.2,windows 10,以太网卡(物理)
V192.168.1.5,virtualbox+centos7,桥接网络
c1192.168.1.10,docker容器在macnet
c2192.168.1.11,docker容器在macnet

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 anapsix/alpine-java bash
docker run -it --net=macnet --ip=192.168.1.11 -h=c2 anapsix/alpine-java bash

码头工人版本是 17.06.0-ce

我期待以下所有工作,但只有第一个工作(->意味着ping):
c1<--> c2 OK
c1<--> VFail
c1<--> WFail
c1--> GFail

以上步骤有什么问题吗?

顺便说一句,有人可以帮助创建标签“macvlan”和“ipvlan”吗?

4

2 回答 2

2

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

要从 VM 连接到容器 C1 和 C2,请创建一个类型为 bridge 的接口并分配一个 ip。下面的命令:(这些命令可能会产生副作用。您可能会完全失去与虚拟机的连接。如果您通过 ssh 连接,请确保您有 2 个连接到虚拟机的接口和 ssh 到虚拟机的接口,而不是网络 192.168.1.0/ 中具有 IP 的接口/ 24)

  1. 删除网络 192.168.1.0/24 中具有 ip 的接口的 ip
  2. ip addr delete (ip_of_interface) dev (interface eg-eth0)
  3. ip link add mymacvlan1 link (VM interface name eg. - eth0) type macvlan mode bridge
  4. ip 链接设置 mymacvlan1
  5. ip addr add 192.168.1.20/24 dev mymacvlan1
  6. ping 你的容器 - ping (C1 ip) -I mymacvlan1

请注意,这些更改不会持续启动

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

于 2017-08-02T15:34:27.817 回答
-1

我的设置和你一样。我的意思是一个 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 通,以及本地主机和外部网络(如 google.com 或 yahoo.com)。

让我知道这是否有帮助。

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

于 2017-08-02T10:18:02.073 回答