Ответ 1
Это активно запрашивается в docker/machine
выпуске docker/machine
1709
Я хочу иметь возможность указывать IP-адрес виртуальной машины (то есть значение, указанное в "URL" в Docker-machine ls), когда я создаю его с помощью docker-machine create.
Я хочу этого, потому что я полагаюсь на адрес по умолчанию boot2docker 192.168.59.103, но теперь он меняется от машины к машине.
Мой виртуальный ящик имеет диапазон dhcp 192.168.99.100 - 255, и я хочу установить IP до 100.
Я нашел простой трюк для установки статического 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
запускаboot2docker
и выполняется.Теперь при загрузке машины команда выполняется и устанавливается статический IP.
docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
test-1 - virtualbox Running tcp://192.168.99.50:2376 test-1 (master)
Микеле Тедески (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
именем вашей док-машины)
Вот сценарий (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 Монти Уайлд комментирует, что это 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.