当我创建容器时,我想在同一个LAN中设置特定容器的IP地址。
这可能吗?如果没有,创建后我可以编辑DHCP IP地址吗?
答案 0 :(得分:4)
考虑到(现在是旧的2013年10月)文章" How to configure Docker to start containers on a specific IP address range",的结论,这似乎不可能(或至少"由Docker")自动完成。
2015年11月更新:docker/machine issue 1709中讨论了类似的问题,其中包括recent workaround (Nov 2015)针对码头机提出的Tobias Munk (schmunk42
)
(对于容器,请参阅下一节):
某些用例的解决方法可能是创建这样的计算机:
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 (Classless Inter-Domain Routing) ,则机器应始终在启动时获得
.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
启动脚本搜索并执行的文件boot2docker
。现在在机器启动期间执行命令并设置静态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
) adds
我已使用以下命令更新了命令:
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-discovery
替换为泊坞机的名称)
2015年4月:
文章提到了 create your own bridge 的可能性(但这并没有将其中一个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,您可以使用创建网桥和一对对等接口的静态脚本尝试" How can I set a static IP address in a Docker container?"。
2015年7月更新:
上面提到的想法也在" How can I set a static IP address in a Docker container?"使用:
结果应该是Docker服务器成功启动,现在准备将容器绑定到新桥 暂停以验证网桥的配置后,尝试创建一个容器 - 您将看到其IP地址在您的新IP地址范围内,Docker将自动检测到该地址。
您可以使用
brctl show
命令查看Docker在启动和停止容器时添加和删除桥接器的接口,并且可以在容器内运行ip addr和ip route以查看它已被赋予地址在网桥的IP地址范围内,并被告知使用网桥上的Docker主机IP地址作为其他互联网的默认网关。
启动docker:-b=br0
(这也是echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/default/docker
默认为您设置的内容)
使用pipework(以下192.168.1.1是默认网关IP地址):
pipework br0 container-name 192.168.1.10/24@192.168.1.1