提问者:小点点

如何在创建docker机器或容器时设置特定的固定IP地址?


创建容器时,我希望在同一LAN中设置特定容器的IP地址。

可能吗?如果没有,在创建之后我可以编辑DHCP IP地址吗?


共1个答案

匿名用户

考虑到(现在是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(无类域间路由),则机器在启动时应始终获得.100IP。

另一个变通方法:

我的虚拟盒子有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