2015-12-17 3 views

Antwort

17

, die aktiv in docker/machine issue 1709

angefordert wird, möchte ich die IP-Adresse einer VM angeben können (dh den Wert, der unter „URL“ in Docker-Maschine ls aufgeführt ist), wenn ich es schaffen, mit Docker-Maschine erstellen.

Ich möchte dies, weil ich auf Boot2docker die Standardadresse 192.168.59.103 angewiesen habe, aber jetzt variiert es von Maschine zu Maschine.

Die current workaround:

Mein VirtualBox hat dhcp Bereich 192.168.99.100 - 255 und ich möchte eine IP setzen, bevor 100.

ich einen einfachen Trick gefunden habe eine statische einstellen IP: nach einer Maschine erstellen, ich diesen Befehl und starten Sie die Maschine:

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 

Dieser Befehl erstellt eine Datei bootsync.sh, die von boot2docker Startskripten durchsucht und ausgeführt wird.

Jetzt während des Bootens des Computers wird der Befehl ausgeführt und statische IP gesetzt.

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

Ich habe die Befehle aktualisiert mit:

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 

dann Befehl ausführen (nur beim ersten Mal)

docker-machine regenerate-certs prova-discovery 

jetzt die IP nicht vom DHCP-

(ersetzen prova-discovery durch den Namen Ihrer Docker-Maschine) geändert wird


Hier ist das (Windows) Skript (dmvbf.bat) ich verwende jetzt, auf das, was oben ist:

@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" 

(Anmerkung: auf 10, Windows-Monty Wildcomments, dass es udhcpc.eth0.pid ist, nicht udhcpc.eth1.pid)

Ich starte das vm (docker-machine start <machine-name>) und dann:

dmvbf <machine-name> 99 101 

ich das nur einmal.

Bei der nächsten docker-machine start <machine-name> lautet die IP 192.168.99.101.

+0

Schöne Workaround. Hoffe das wird jedoch gelöst. – ashic

+0

Ich versuchte dies - ich hoffte wirklich, es würde funktionieren - mit dem Standard-Computer, Windows 10, mit dem Standard-Computer in VirtualBox VM. Es macht das vom Docker erzeugte Zertifikat ungültig. Wenn Sie docker-machine ls ausführen, wird angegeben, dass das Zertifikat für die alte IP gültig ist, nicht für die neue IP. – rmcsharry

+1

@mcs das wird erwartet: yo machen eine letzte docker-maschine regenerieren-certs und du bist fertig. – VonC

0

Meine Workaround war zu beobachten, was VBoxNet der Docker-Maschine angeschlossen war und dann ging ich in VirtualBox, um den DHCP-Bereich zurückzusetzen, um nur die IP zu liefern, die ich der Maschine haben wollte.

Verwandte Themen