web-dev-qa-db-fra.com

Existe-t-il un moyen de forcer docker-machine à créer vm avec une adresse IP spécifique?

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

20
ashic

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émarrage boot2docker 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.

26
VonC

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.

1
humbleCoder

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.

0
Thaddeus Aid