Есть ли способ заставить докер-машину создавать vm с определенным ip?

Есть ли способ заставить докер-машину создать докер vm с определенным ip (при условии, что 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, вам нужно использовать соответствующую маску подсети.