有没有办法强制docker-machine用特定的ip创建docker vm(假设ip可用)?
答案 0 :(得分:28)
当我使用docker-machine创建VM时,我希望能够指定VM的IP地址(即" URL"在docker-machine ls中列出的值)
我想要这个,因为我一直依赖boot2docker的默认地址192.168.59.103,但现在它因机器而异。
我的虚拟机有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
) 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
替换为泊坞机的名称)
以下是我现在使用的(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 /bar/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 comments 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。
答案 1 :(得分:1)
我更改了VirtualBox的DHCP范围。将上限和下限都设置为192.168.99.100,然后重新启动docker计算机。要更改范围,请转到VirtualBox->文件->主机网络管理器->选择适当的适配器->更改上限。
答案 2 :(得分:1)
以下脚本使用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
答案 3 :(得分:0)
我的解决方法是观察Docker机器连接的VBoxNet,然后我进入VirtualBox重置DHCP范围,只提供我希望机器拥有的IP。
答案 4 :(得分:0)
是的,有一个使用特定IP创建的选项。您所需要做的就是使用-virtualbox-hostonly-cidr 选项指定ip / ip-range。
例如:
当您要分配特定的IP时,假设您要分配10.15.1.24,则将进行适当的配置(最重要的是我们在此处使用的掩码。对于特定的IP,您需要设置子网掩码设置为32):
docker-machine create --driver virtualbox --virtualbox-hostonly-cidr "10.15.1.24/32" dev
如果要从特定的IP范围中选择一个IP,则需要使用适当的子网掩码。