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)?
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 vonboot2docker
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.
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
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.
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.
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.