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

use*_*964 7 ip containers bridge docker

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

那可能吗?

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

Von*_*onC 6

考虑到(现在是 2013 年 10 月)文章“如何配置 Docker 以在特定 IP 地址范围内启动容器”的结论,这似乎是不可能的(或者至少“由 Docker 自动为你完成”).


2015 年 11 月更新:在docker/machine issue 1709 中讨论了类似的问题,其中包括Tobias Munk ( )docker machine提出的最近解决方法(2015 年 11 月) (对于容器,请参见下一节):schmunk42

一个解决方法对于一些用例可以创建出象这样的机器:

如果没有其他机器具有相同的cidr (Classless Inter-Domain Routing),机器应该总是.100在启动时获得IP。

另一种解决方法

(请参阅“如何使用 docker-machine 和 VirtualBox 创建具有特定 URL 的 docker 机器? ”中的脚本)

我的虚拟机的 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 
Run Code Online (Sandbox Code Playgroud)

此命令创建一个bootsync.shboot2docker启动脚本搜索并执行的文件。

现在在机器启动期间执行命令并设置静态 IP。

docker-machine ls
NAME              ACTIVE   DRIVER       STATE     URL                                      SWARM
test-1                      -        virtualbox     Running   tcp://192.168.99.50:2376      test-1 (mast
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

然后运行命令(仅第一次)

docker-machine regenerate-certs prova-discovery
Run Code Online (Sandbox Code Playgroud)

现在IP不会被DHCP改变

(替换prova-discovery为您的 docker-machine 的名称)


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
Run Code Online (Sandbox Code Playgroud)

要在现有网桥 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"' >> /etc/default/docker默认情况下可以为您设置的)

  • 使用管道(下面的 192.168.1.1 是默认网关 IP 地址):

    pipework br0 container-name 192.168.1.10/24@192.168.1.1
    
    Run Code Online (Sandbox Code Playgroud)