web-dev-qa-db-de.com

Gibt es eine Möglichkeit, Docker-Maschinen zu zwingen, VM mit einer bestimmten IP zu erstellen?

Gibt es eine Möglichkeit, Docker-Maschinen zu zwingen, die Docker-VM mit einer bestimmten IP-Adresse zu erstellen (vorausgesetzt, dass IP verfügbar ist)?

20
ashic

Das wird aktiv in docker/machine Ausgabe 1709 angefordert

Ich möchte in der Lage sein, die IP-Adresse eines VM anzugeben (d. H. Des Wertes, der unter "URL" in Docker-Machine ls aufgeführt ist), wenn ich ihn mit Docker-Machine erstellen.

Ich möchte dies, weil ich mich auf die Standardadresse von boot2docker (192.168.59.103) verlassen habe, aber jetzt von Maschine zu Maschine unterschiedlich ist.

Die aktuelle Problemumgehung :

Meine Virtualbox hat einen DHCP-Bereich von 192.168.99.100 - 255 und ich möchte eine IP vor 100 einstellen.

Ich habe einen einfachen Trick gefunden, um eine statische IP-Adresse festzulegen: Nachdem ich eine Maschine erstellt habe, führe ich diesen Befehl aus und starte die Maschine neu:

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.

Während des Maschinenstarts wird der Befehl ausgeführt und die statische IP-Adresse festgelegt.

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)fügt hinzu

Ich habe die Befehle mit aktualisiert:

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 wird die IP vom DHCP nicht geändert

(Ersetzen Sie prova-discovery durch den Namen Ihrer Docker-Maschine)


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

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

(Hinweis: Unter Windows 10 sind Monty WildKommentare dass es udhcpc.eth0.pid ist, nicht udhcpc.eth1.pid).

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

 dmvbf <machine-name> 99 101

Das mache ich nur einmal.

Beim nächsten docker-machine start <machine-name> lautet die IP-Adresse 192.168.99.101.

26
VonC

Das folgende Skript verwendet default als Name der Maschine und 10.100.1.100 als statische IP-Adresse.

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

Starten Sie die Maschine neu:

docker-machine restart default

Generieren Sie die Zertifikate neu:

docker-machine regenerate-certs default -f

Zeigen Sie abschließend die Umgebungsvariablen an:

docker-machine env default
1
Bruno Wego

Ich habe den DHCP-Bereich von VirtualBox geändert. Sowohl auf und abwärts auf 192.168.99.100 gemacht als auch die Docker-Maschine neu gestartet. Um den Bereich zu ändern, gehen Sie zu VirtualBox-> Dateien-> Host-Netzwerkmanager-> wählen Sie den entsprechenden Adapter aus -> Ändern Sie die Obergrenze.

1
humbleCoder

Mein Workaround bestand darin, zu beobachten, an was VBoxNet die Docker-Maschine angeschlossen war, und dann ging ich in die VirtualBox, um den DHCP-Bereich zurückzusetzen, um nur die IP zu liefern, die die Maschine haben sollte.

0
Thaddeus Aid

Ja, es gibt eine Option zum Erstellen mit einer bestimmten IP-Adresse. Sie müssen lediglich IP/IP-Bereich mit der Option - virtualbox-hostonly-cidr angeben.

Zum Beispiel:

  • wenn Sie eine bestimmte IP zuweisen möchten, sagen wir, Sie möchten 10.15.1.24 zuweisen, dann lautet die entsprechende Konfiguration (das Wichtigste ist die hier verwendete Maske. Für eine bestimmte IP müssen Sie die Subnetzmaske auf 32 setzen):

    docker-machine create --driver virtualbox --virtualbox-hostonly-cidr "10.15.1.24/32" dev

  • wenn Sie eine IP aus einem bestimmten IP-Bereich auswählen möchten, müssen Sie die entsprechende Subnetzmaske verwenden.

0
Nigel