docker多个容器与静态地址

我正在开发一个通常使用虚拟机实施的项目。 但是我想用Docker容器来破解,以便练习和学习新东西。

所以这里是我想要做的:在同一个主机上创build多个容器,使用静态IP地址相互连接(但不一定与外部世界连接)。 换句话说,我想仿效一种独立的networking,由几台连接到同一个交换机的计算机组成。

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

这让我疯狂。 SOS! 谢谢

编辑:我没有说的重要的东西:我使用我的Mac Book Air,并且运行boot2docker(创build运行docker的虚拟机)。 当我使用“docker run -i -t ubuntu / bin / bash”运行映像时,我没有将docker0作为接口:在容器中运行“ip a”只显示lo和eth0。

你为什么试试--net=host ? 该选项完全禁用networking隔离,并在默认的networking名称空间中运行容器。 这意味着docker容器可以看到所有的主机networking接口。 我认为这不是你的select。

重要的是要告诉,docker如何处理孤立的networking。 首先,它创build一个名为docker0 (至less默认)。 每次当你启动容器与孤立networking(即,没有--net=host ),docker工人创build一个veth接口。 其中一个接口泊坞窗给容器(如果你将在你的容器中运行ip link list ,你会看到这个虚拟接口)。 另一个docker插在桥docker0 (顺便说一下,你可以通过向docker0守护进程传递“-b $ {BRIDGE}”选项来指定使用哪个桥)。

我build议你阅读关于docker桥的文章,以及关于networking名称空间的文章 。

尝试运行独立networking的容器,然后分配你喜欢的静态IP。 但是请注意路由 – 主机必须具有到子网的路由,您的容器在哪里运行。 最简单的方法来做到这一点(而且只有我这么做) – 为您分配来自同一子网的dockerIP作为docker桥。

下面的例子适合我。

 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