考虑到(现在是2013年10月)文章“如何配置Docker在特定IP地址范围内启动容器”的结论,这似乎不可能(或者至少“Docker自动为您完成”)。
2015年11月更新:在docker/机问题1709中讨论了类似的问题,其中包括Tobias Munk(schmunk42
)为docker机
(容器见下一节)提出的最近的解决方案(2015年11月):
一些用例的解决方法可以是创建如下机器:
>
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。
另一个变通方法:
我的虚拟盒子有dhcp范围192.168.99.100-255,我想在100之前设置一个IP。
我发现了一个设置静态IP的简单技巧:创建机器后,我运行以下命令并重新启动机器:
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
此命令用于创建文件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
现在,DHCP不会更改IP
(将prova-发现
替换为docker机器的名称)
2015年4月:
本文提到了创建自己的网桥的可能性(但这并没有将其中一个IP地址分配给容器):
创建自己的网桥,用固定地址配置,告诉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,可以尝试“如何在Docker容器中设置静态IP地址?”,使用创建网桥和一对对等接口的静态脚本。
2015年7月更新:
上面提到的想法在“如何在Docker容器中设置静态IP地址”中也有详细说明使用:
结果应该是Docker服务器成功启动,现在准备将容器绑定到新的网桥。
暂停以验证网桥的配置后,尝试创建一个容器-您将看到它的IP地址在您的新IP地址范围内,哪个Docker将自动检测。
您可以使用brctl show
命令在启动和停止容器时查看Docker在桥接器中添加和删除接口,并且可以在容器内运行ip addr和ip route,以查看是否已在网桥的ip地址范围内为其指定了一个地址,并且已被告知使用网桥上Docker主机的ip地址作为其到Internet其余部分的默认网关。
>
开始docker时使用:-b=br0
(这也是echo'docker_OPTS=“-b=bridge0”的内容
使用管道(以下192.168.1.1为默认网关ip地址):
pipework br0 container-name 192.168.1.10/24@192.168.1.1