我有一些我用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的机器:主机和防火墙/网关。
容器可以访问互联网,他们可以看到对方,也可以从主机上连接到容器。
我该如何使用该方案?在这个阶段,如果可能的话,我宁愿不使用任何编排工具。
答案 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。