在主机网络上运行Docker容器

时间:2019-04-03 15:00:37

标签: docker macvlan

我想为docker container分配一个静态IP,并使其像主机网络上的虚拟机一样工作。

示例:

10.10.10.0/24网络

运行Docker IP的物理主机:10.10.10.1

Docker容器IP:10.10.10.2

现在,只要我有一个单独的容器NIC,这显然很容易-否则ARP存在问题。我已经阅读了macvlan个网络,它们似乎是解决此问题的一种方式:

https://docs.docker.com/network/macvlan/

但是,它清楚地表明:

  

在这种情况下,您需要在自己的计算机上指定一个物理接口   用于Macvlan的Docker主机以及子网和网关   Macvlan。

此物理接口是否仍可以携带“常规” IP地址,以便它可以与网络上的其他物理主机进行通信?

1 个答案:

答案 0 :(得分:0)

是的,可以。

默认情况下,尽管主机与容器之间没有连接。 Official doc for v17.09声明以下内容:

  

使用macvlan时,您无法ping或使用默认值进行通信   命名空间IP地址。例如,如果您创建一个容器并尝试   ping Docker主机的eth0,它将无法正常工作。那交通是   由内核模块本身明确过滤以提供   额外的提供程序隔离和安全性。

     

可以将macvlan子接口添加到Docker主机,以允许   Docker主机和容器之间的流量。 IP地址需求   可以在此子接口上设置并从父地址中删除。

尽管该版本的docker较旧,但手册中却包含了一些有用的命令,这些命令已在较新的文档中删除:

  

在Debian或Ubuntu上,将以下内容添加到/ etc / network / interfaces将使其永久存在。

auto eno1
iface eno1 inet manual

auto mac0
iface mac0 inet dhcp
  pre-up ip link add mac0 link eno1 type macvlan mode bridge
  post-down ip link del mac0 link eno1 type macvlan mode bridge

注意:确保您没有使用v18中引入的Ubuntu网络计划来管理这些接口。