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

时间:2015-04-17 08:24:18

标签: ip docker containers bridge

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

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

1 个答案:

答案 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。

另一种解决方法

(请参阅我的脚本" How do I create a docker machine with a specific URL using docker-machine and VirtualBox?")

  

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