docker具有静态地址的多个容器

时间:2014-11-08 12:14:11

标签: static ip docker

我正在开发一个通常用VM实现的项目。但是我想用docker容器来破解,以便练习和学习新东西。

所以这就是我想做的事情:创建在同一主机上运行的几个容器,使用静态IP地址,彼此连接(但不一定连接到外部世界)。 换句话说,我想模拟一种独立的网络,由连接到同一交换机的几台计算机组成。

我尝试更改容器中的/ etc / network / interfaces以设置eth0,docker0的静态IP地址......但它不会以任何方式影响系统。我试图使用--net = host, - cap-add = NET_ADMIN,但它没有帮助。

这让我发疯了。 SOS! 感谢

编辑: 重要的事情我没说:我正在使用我的Mac Book Air,我正在运行boot2docker(它创建了一个运行docker的VM)。 当我用“docker run -i -t ubuntu / bin / bash”运行图像时,我没有docker0作为接口:在容器中运行“ip a”只显示lo和eth0。

1 个答案:

答案 0 :(得分:2)

你为什么试试--net=host?此选项根本禁用网络隔离,并在默认网络命名空间中运行容器。这意味着docker容器可以看到所有主机网络接口。我认为这不是你的选择。

重要的是告诉我们,码头工人如何处理孤立的网络。首先,它创建名为docker0的桥(至少在默认情况下)。每次启动具有隔离网络的容器(即没有--net=host)时,docker都会创建一对veth接口。其中一个接口docker提供给容器(如果您在容器中运行ip link list,您将看到这个虚拟接口。另一个docker插入桥docker0(顺便说一句,你可以通过传递#34; -b $ {BRIDGE}"选项到docker守护进程来说明使用哪个桥。)

我建议您阅读article about docker bridgesthis one about network namespaces

尝试运行具有隔离网络的容器,然后分配您喜欢的静态IP。但要注意路由 - 主机必须具有到子网的路由,容器在哪里运行。最简单的方法(也是唯一适合我的方式) - 从与docker bridge相同的子网中为您分配容器IP。

以下示例适用于我。

user@host$ ip addr
docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::5484:7aff:fefe:9799/64 scope link 
       valid_lft forever preferred_lft forever

root@docker-1# ip addr
eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link 
       valid_lft forever preferred_lft forever


root@docker-2# ip addr
eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 02:42:ac:11:00:05 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:5/64 scope link 
       valid_lft forever preferred_lft forever