2015-12-17 1 views

ответ

17

Это активно запрошенный в docker/machine issue 1709

Я хочу, чтобы иметь возможность указать IP-адрес виртуальной машины (то есть значение, которое перечислено в разделе «URL» в Докер-машина LS), когда я создаю его докер-машина.

Я хочу это, потому что я полагался на адрес загрузки boot2docker по умолчанию 192.168.59.103, но теперь он варьируется от машины к машине.

current workaround:

Мой VirtualBox имеет диапазон 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.

Теперь во время загрузки машины выполняется команда и задается статический 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 

теперь 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, Monty Wildcomments что 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.

+0

Ницца обходной путь. Надеюсь, что это разрешится. – ashic

+0

Я пробовал это - действительно надеялся, что это сработает - с машиной по умолчанию, Windows 10, с машиной по умолчанию в VirtualBox VM. Это делает недействительным сертификат, созданный докером. Когда вы выполняете докер-машину ls, она заявляет, что сертификат действителен для старого IP-адреса, а не нового IP-адреса. – rmcsharry

+1

@mcs, который, как ожидается: выполните окончательную рестарт-сертификацию докеров-машин, и все готово. – VonC

0

Мое обходное решение состояло в том, чтобы посмотреть, к чему привязана машина докеров-докеров VBoxNet, а затем я зашел в VirtualBox, чтобы сбросить диапазон DHCP, чтобы предоставить только тот IP-адрес, который мне нужен, чтобы машина была.

Смежные вопросы