如何使用外部网关在其网络中运行docker容器?

时间:2016-10-05 10:13:13

标签: linux networking docker docker-compose

我有一些我用docker-compose管理的图像,我需要在与主机(运行Ubuntu 16)不同的网络中运行它们。

主机具有IP 10.0.1.19/24和网关10.0.1.1。

这是我的docker-compose.yml:

version: '2'
services:
  db:
    ...
    networks:
      ab-net:
        ipv4_address: 10.1.2.250
    ...

  app:
    ...
    networks:
      ab-net:
        ipv4_address: 10.1.2.11
    ...

networks:
  ab-net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 10.1.2.0/23
          gateway: 10.1.2.1

防火墙(不受我控制且无法更改)允许通过容器直接传入到10.1.2.0/23的连接。网关10.1.2.1(防火墙本身)而不是主机。

使用该配置运行容器,docker在主机上使用IP 10.1.2.1配置br-interface;因此在网络上有两台具有相同IP的机器:主机和防火墙/网关。

容器可以访问互联网,他们可以看到对方,也可以从主机上连接到容器。

我该如何使用该方案?在这个阶段,如果可能的话,我宁愿不使用任何编排工具。

2 个答案:

答案 0 :(得分:1)

我发现这样做的唯一选择是使用(当前)实验性功能“Ipvlan Network”。

  

Linux实现非常轻量级,因为相反   与使用传统的Linux网桥隔离相比,它们很简单   与Linux以太网接口或子接口相关联以强制执行   网络之间的分离以及与物理网络的连接。

documentation非常大,无法在此处复制,但这些是我必须运行的命令才能实现:

echo 8021q >> /etc/modules
modprobe 8021q
apt-get install vlan
edit /etc/network/interfaces

auto eth1.2320
iface eth1.2320 inet manual
    vlan-raw-device eth1

auto eth1.2321
iface eth1.2321 inet manual
    vlan-raw-device eth1

auto eth1.2322
iface eth1.2322 inet manual
    vlan-raw-device eth1

auto eth1.2323
iface eth1.2323 inet manual
    vlan-raw-device eth1

auto eth1.2324
iface eth1.2324 inet manual
    vlan-raw-device eth1

/etc/init.d/networking restart

答案 1 :(得分:0)

您无法设置不同的网络外部docker的NAT。