有没有一种方法可以强制docker机器创建具有特定ip的vm



有没有办法强制docker机器创建具有特定ip的docker vm(假设ip可用)?

docker/machine 1709 中主动请求

当我使用docker machine create创建VM时,我希望能够指定VM的IP地址(即在docker machines ls中的"URL"下列出的值)。

我想要这个,因为我一直依赖boot2docker的默认地址192.168.59.103,但现在它因机器而异。

当前的解决方法:

我的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 (master)

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-discovery


这是我现在使用的(Windows)脚本(dmvbf.bat),基于上面的内容:

@echo off
setlocal enabledelayedexpansion
set machine=%1
if "%machine%" == "" (
    echo dmvbf expects a machine name
    exit /b 1
)
set ipx=%2
if "%ipx%" == "" (
    echo dmvbf x missing ^(for 192.168.x.y^)
    exit /b 2
)
set ipy=%3
if "%ipy%" == "" (
    echo dmvbf y missing ^(for 192.168.x.y^)
    exit /b 3
)
echo kill $(more /var/run/udhcpc.eth1.pid) | docker-machine ssh %machine% sudo tee /var/lib/boot2docker/bootsync.sh >NUL
echo ifconfig eth1 192.168.%ipx%.%ipy% netmask 255.255.255.0 broadcast 192.168.%ipx%.255 up | docker-machine ssh %machine% sudo tee -a /var/lib/boot2docker/bootsync.sh >NUL
echo route add default gw <gateway ip address here> | docker-machine ssh %machine% sudo tee -a /var/lib/boot2docker/bootsync.sh >NUL
docker-machine ssh %machine% "sudo cat /var/run/udhcpc.eth1.pid | xargs sudo kill"
docker-machine ssh %machine% "sudo ifconfig eth1 192.168.%ipx%.%ipy% netmask 255.255.255.0 broadcast 192.168.%ipx%.255 up"

(注意:在Windows 10上,Monty Wild评论它是udhcpc.eth0.pid,而不是udhcpc.eth1.pid

我启动vm(docker-machine start <machine-name>),然后:

 dmvbf <machine-name> 99 101

我只做过一次。

在下一个docker-machine start <machine-name>,IP将为192.168.99.101。

下面的脚本使用default作为机器名称,10.100.1.100作为静态IP地址。

cat << EOF | docker-machine ssh default sudo tee /var/lib/boot2docker/bootsync.sh > /dev/null
ifconfig eth1 10.100.1.100 netmask 255.255.255.0 broadcast 10.100.1.255 up
ip route add default via 10.100.1.1
EOF

重新启动机器:

docker-machine restart default

重新生成证书:

docker-machine regenerate-certs default -f

最后,显示环境变量:

docker-machine env default

我更改了VirtualBox的DHCP范围。将上限和下限都设置为192.168.99.100,并重新启动码头机器。要更改范围,请转到VirtualBox->文件->主机网络管理器->选择适当的适配器->更改上限。

是的,有一个使用特定ip创建的选项。您所需要做的就是使用--virtualbox hostonly cidr选项指定ip/ip范围。

例如:

  • 当你想分配特定的ip时,假设你想分配10.15.1.24,那么适当的配置将是(最重要的是我们在这里使用的掩码。对于特定的ip,你需要将子网掩码设置为32):

    docker-machine create --driver virtualbox --virtualbox-hostonly-cidr "10.15.1.24/32" dev

  • 如果您想从特定的ip范围中选择一个ip,那么您需要使用适当的子网掩码。

我的解决方法是观察docker机器连接到什么VBoxNet,然后我进入VirtualBox重置DHCP范围,只提供我希望机器拥有的IP。

最新更新