有没有办法强制docker机创build具有特定IP的VM?
有没有办法强制docker机创build一个特定的IP(假设IP可用)的dockerVM?
这是在docker/machine
问题1709积极要求
我希望能够指定一个虚拟机的IP地址(即在docker-machine ls中“URL”下列出的值),当我使用docker-machine create创build它时。
我想要这个,因为我一直依靠boot2docker的默认地址192.168.59.103,但是现在每个机器都不一样。
目前的解决方法 :
我的virtualbox有dhcp范围192.168.99.100 – 255,我想在100之前设置一个IP。
我发现一个简单的技巧来设置一个静态的IP:创build一台机器后,我运行这个命令,并重新启动机器:
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
这个命令创build一个由
boot2docker
启动脚本search并执行的文件bootsync.sh
。现在在机器启动期间执行该命令并设置静态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
现在IP不会被DHCP改变
(用prova-discovery
-machine的名字replaceprova-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.xy^) exit /b 2 ) set ipy=%3 if "%ipy%" == "" ( echo dmvbf y missing ^(for 192.168.xy^) 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 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"
我启动docker-machine start <machine-name>
( docker-machine start <machine-name>
),然后:
dmvbf <machine-name> 99 101
我只做一次。
在下一个docker-machine start <machine-name>
,IP将是192.168.99.101。
我的解决方法是观察Docker机器连接到的VBoxNet,然后进入VirtualBox重置DHCP范围,只传递我希望机器拥有的IP。