如何在创builddocker机器或容器时设置特定(固定)的IP地址?

当我创build我的容器时,我想在同一个局域网中设置一个特定容器的IP地址。

那可能吗?

如果没有,创build后我可以编辑DHCP IP地址?

考虑到(现在已经是2013年10月)的文章“ 如何configurationDocker以在特定的IP地址范围上启动容器 ”的结论, 这似乎不可能(或者至less“由Docker自动完成”)


2015年11月更新: Docker / Machine issue 1709中讨论了类似的问题,其中包括Tobias Munk( schmunk42 )针对docker机提出的最新解决方法(2015年11月)
(容器见下一节):

一些用例的解决方法可能是创build如下的机器:

  • 192.168.98.100

     docker-machine create -d virtualbox --virtualbox-hostonly-cidr "192.168.98.1/24" m98 
  • 192.168.97.100

     docker-machine create -d virtualbox --virtualbox-hostonly-cidr "192.168.97.1/24" m97 
  • 192.168.96.100

     docker-machine create -d virtualbox --virtualbox-hostonly-cidr "192.168.96.1/24" m96 

如果没有其他机器具有相同的cidr(无类域间路由) ,机器启动时应始终获得.100 IP。

另一个解决方法

(请参阅“ 如何使用docker-machine和VirtualBox创build具有特定URL的docker机器 ”中的脚本)

我的virtualbox有dhcp范围192.168.99.100 – 255,我想在100之前设置一个IP。

我发现一个简单的技巧来设置一个静态的IP:创build一台机器后,我运行这个命令,并重新启动机器:

 echo "ifconfig eth1 192.168.99.50 netmask 255.255.255.0 broadcast 192.168.99.255 up" \ | docker-machine ssh prova-discovery sudo tee /var/lib/boot2docker/bootsync.sh > /dev/null 

这个命令创build一个由boot2docker启动脚本search并执行的文件bootsync.sh

现在在机器启动期间执行该命令并设置静态IP。

 docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM test-1 - virtualbox Running tcp://192.168.99.50:2376 test-1 (mast 

Michele Tedeschi( micheletedeschi ) 补充道

我已经更新了命令:

 echo "kill `more /var/run/udhcpc.eth1.pid`\nifconfig eth1 192.168.99.50 netmask 255.255.255.0 broadcast 192.168.99.255 up" | docker-machine ssh prova-discovery sudo tee /var/lib/boot2docker/bootsync.sh > /dev/null 

然后运行命令(只有第一次)

 docker-machine regenerate-certs prova-discovery 

现在IP不会被DHCP改变

(用prova-discovery -machine的名字replaceprova-discovery


2015年4月:

这篇文章提到了创build自己的网桥的可能性(但是这并不会将这些IP地址中的一个分配给容器):

创build自己的桥梁,configuration一个固定的地址,告诉Docker使用它。 完成。

如果你手动做,它会看起来像这样(在Ubuntu上):

 stop docker ip link add br0 type bridge ip addr add 172.30.1.1/20 dev br0 ip link set br0 up docker -d -b br0 

要在现有网桥IP范围内分配静态IP,可以使用创build网桥和一对对等接口的静态脚本来尝试“ 如何在Docker容器中设置静态IP地址? ”。

2015年7月更新:

上面提到的想法在“ 如何在Docker容器中设置静态IP地址? ”中也有详细介绍:using:

  • build立你自己的桥梁

结果应该是Docker服务器启动成功,现在准备将容器绑定到新桥。
在暂停validation网桥的configuration之后,尝试创build一个容器 – 您将看到其IP地址在您的新IP地址范围内,Docker将自动检测到该IP地址。

您可以使用brctl show命令来查看Docker在启动和停止容器时添加和删除接口的接口,并且可以在容器中运行ip addr和ip route来查看它已经在桥接器的IP地址范围内被赋予一个地址并被告知使用网桥上的Docker主机的IP地址作为其默认网关。

  • 启动docker: -b=br0 (也就是echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/default/docker可以为你设置的东西)

  • 使用pipe道 (192.168.1.1以下是默认的网关IP地址):

     pipework br0 container-name 192.168.1.10/24@192.168.1.1