web-dev-qa-db-fra.com

Redirection de port dans docker-machine?

Puisque boot2docker est obsolète je suis passé à docker-machine mais je ne sais pas comment ouvrir un port de docker-machine. Dans boot2docker Je pourrais faire comme ça:

boot2docker ssh -L 27017:localhost:27017

Cela transmettrait le port 27017 de VirtualBox à l'hôte local 27017 tant que la connexion SSH est ouverte. Notez que je ne cherche pas un moyen d'ouvrir le port de manière permanente dans VirtualBox. Comment puis-je y parvenir avec docker-machine?

46
Johan

Vous pouvez toujours accéder à la commande VBoxmanage.exe à partir de la VirtualBox utilisée par la machine Docker:

VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port27017,tcp,,27017,,27017";
  • Utilisation docker-machine info pour obtenir le nom de votre vm.
  • utilisez modifyvm si la machine virtuelle n'est pas encore démarrée.

Voir un exemple pratique dans cette réponse .


C’est la solution actuelle, dans l’attente de la possibilité de passer l’argument à docker-machine ssh: voir numéro 691 .

L’autre solution consiste à ne pas transférer le port et à utiliser directement l’adresse IP de la machine virtuelle:

 $(docker-machine ip default)

Comme commenté par sdc :

Vous pouvez vérifier que la redirection de port est correctement configurée avec

 VBoxManage showvminfo boot2docker-vm | grep "NIC.* Rule" 
44
VonC

Avec les versions récentes de machine, vous pouvez simplement faire (où par défaut est le nom de la machine):

docker-machine ssh default -L 27017:localhost:27017

C'est une solution plus temporaire que le changement de configuration VM.

Utilisez la variante suivante pour transférer uniquement les ports dans un processus en arrière-plan:

docker-machine ssh default -f -N -L 27017:localhost:27017
  • - f Demande à ssh de passer en arrière-plan juste avant l'exécution de la commande.
  • - N Autorise les commandes vides (utile ici pour transférer les ports uniquement)
26
David

Vous pouvez ssh dans la machine et transmettre les arguments de transfert de port habituels:

ssh docker@$(docker-machine ip default) -L 27017:localhost:27017

Le mot de passe de l'utilisateur du menu fixe est tcuser . (voir https://github.com/boot2docker/boot2docker )

17
Stijn

Depuis que j'ai du mal à me rappeler comment faire cela, j'ai créé un petit script bash appelé pf (qui signifie "port forward") qui vous permet de faire:

$ pf 8080

Ceci transférera le port de docker 8080 au port d’hôte 8080 en arrière-plan (append -f pour le faire fonctionner au premier plan). Pour utiliser un autre port hôte, procédez comme suit:

$ pf 8090:8080

qui mappe le port hôte 8090 à 8080.

Pour arrêter la redirection de port, ajoutez -s:

$ pf 8090:8080 -s

(en fait, le port hôte suffit aussi: pf 8090 -s). Il y a aussi d'autres options disponibles, donc consultez la page github .

8
Johan

Si vous ne souhaitez pas utiliser de mots de passe, j'ajouterai que vous devez simplement indiquer la clé privée.

ssh -L 8080:localhost:8080 -i ~/.docker/machine/machines/default/id_rsa docker@$(docker-machine ip default)
3
leonfs

Juste pour améliorer dans le script la réponse de @VonC - actuellement si vous utilisez Docker Toolbox sur MacOS X, le paramètre par défaut VM ordinateur est "par défaut". Ainsi, un script permettant de mapper tous les objets exposés du conteneur doit ressembler comme:

for port in `docker port cassandra | cut -d'-' -f1`; 
do 
    port_num=`echo ${port} | cut -d'/' -f1`
    port_type=`echo ${port} | cut -d'/' -f2`
    echo "Create rule natpf1 for ${port_type} port ${port_num}"
    VBoxManage controlvm "default" natpf1 "${port_type}-port${port_num},${port_type},,${port_num},,${port_num}"
done

si vous essayez d'exécuter plusieurs fois, une instruction avant la création doit être ajoutée pour supprimer la règle existante:

VBoxManage controlvm "default" natpf1 delete "${port_type}-port${port_num}"

Dans le script, il est supposé que vous avez déjà transféré les ports du conteneur à la machine virtuelle.

docker port cassandra

donne une sortie comme:

7000/tcp -> 0.0.0.0:7000
1
npenkov