Есть ли способ заставить докер-машину создать докер vm с определенным ip (при условии, что ip доступен)?
Есть ли способ заставить докер-машину создавать vm с определенным ip?
Ответ 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.
Ответ 2
Я изменил диапазон DHCP VirtualBox. Сделано верхнее и нижнее привязание к 192.168.99.100 и перезапущена докерная машина. Чтобы изменить диапазон, перейдите в VirtualBox-> Files-> host network manager-> и выберите соответствующий adapter-> измените верхнюю границу.
Ответ 3
В приведенном ниже сценарии используется имя по 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
Ответ 4
Мое обходное решение состояло в том, чтобы посмотреть, к какой машине VBoxNet подключилась докерная машина, а затем я перешел в VirtualBox на reset диапазон DHCP для доставки только того IP-адреса, который я хотел бы иметь.
Ответ 5
Да, есть возможность создать с конкретным ip. Все, что вам нужно сделать, это указать ip/ip-range с параметром --virtualbox-hostonly-cidr.
Например:
-
когда вы хотите назначить конкретный ip, допустим, вы хотите назначить 10.15.1.24, тогда будет соответствующая конфигурация (наиболее важная вещь - это маска, которую мы здесь используем. Для конкретного ip вам нужно установить маску подсети равной 32):
docker-machine create --driver virtualbox --virtualbox-hostonly-cidr "10.15.1.24/32" dev
-
если вы хотите выбрать ip из определенного диапазона ip, вам нужно использовать соответствующую маску подсети.