Existe-t-il un moyen de forcer docker-machine à créer le docker vm avec une adresse IP spécifique (en supposant que cette adresse est disponible)?
Ceci est activement demandé dans docker/machine
numéro 1709
Je souhaite pouvoir spécifier l'adresse IP d'un VM (c'est-à-dire la valeur répertoriée sous "URL" dans docker-machine ls) lorsque je la crée avec docker-machine create.
Je le veux parce que je me suis fié à l'adresse par défaut de boot2docker, 192.168.59.103, mais elle varie désormais d'une machine à l'autre.
La solution de contournement en cours } _:
Ma virtualbox a une plage dhcp 192.168.99.100 - 255 et je souhaite définir une adresse IP avant 100.
J'ai trouvé un truc simple pour définir une adresse IP statique: après avoir créé une machine, j'exécute cette commande et redémarre la machine:
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
Cette commande crée un fichier
bootsync.sh
qui est recherché par les scripts de démarrageboot2docker
et exécuté.Maintenant, lors du démarrage de la machine, la commande est exécutée et définit une adresse IP statique.
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
) } _ ajoute
J'ai mis à jour les commandes avec:
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
puis lancez la commande (seulement la première fois)
docker-machine regenerate-certs prova-discovery
maintenant l'IP ne sera pas changé par le DHCP
(remplacez prova-discovery
par le nom de votre docker-machine)
Voici le script (Windows) (dmvbf.bat
) que j'utilise maintenant, basé sur ce qui précède:
@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"
(Remarque: sous Windows 10, Monty Wild _ { commentaires qu'il s'agit de udhcpc.eth0.pid
et non de udhcpc.eth1.pid
)
Je lance le vm (docker-machine start <machine-name>
), puis:
dmvbf <machine-name> 99 101
Je ne le fais qu'une fois.
Au prochain docker-machine start <machine-name>
, l'adresse IP sera 192.168.99.101.
J'ai changé la gamme DHCP de VirtualBox. Défini les limites supérieure et inférieure à 192.168.99.100 et redémarré le poste de travail fixe. Pour modifier la plage, accédez à VirtualBox-> Fichiers-> Gestionnaire de réseau hôte-> choisissez l'adaptateur approprié-> modifiez la limite supérieure.
Ma solution de contournement consistait à regarder à quel VBoxNet le docker était connecté, puis je suis allé dans VirtualBox pour réinitialiser la plage DHCP afin de ne délivrer que l'adresse IP que je souhaitais pour la machine.