如何在创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