Redirection de Port dans docker-machine?

Depuis que boot2docker est obsolète, je suis passé à docker-machine mais je ne sais pas comment ouvrir un port à partir de docker-machine. Dans boot2docker je pourrais faire comme ceci:

boot2docker ssh -L 27017:localhost:27017

Cela redirige le port 27017 de VirtualBox vers localhost 27017 tant que la connexion SSH est ouverte. Notez que je ne cherche pas un moyen d'ouvrir le port en permanence dans VirtualBox. Comment puis-je y parvenir avec docker-machine?

44
demandé sur Johan 2015-08-24 07:41:43

6 réponses

Vous pouvez toujours accéder au VBoxmanage.commande exe de la VirtualBox utilisée par la machine docker:

VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port27017,tcp,,27017,,27017";
  • Utiliser docker-machine info pour obtenir le nom de votre machine virtuelle.
  • 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 de contournement actuelle, en attendant la possibilité de passer l'argument à docker-machine ssh: Voir issue 691.

L'autre solution consiste àpas à transférer le port, et utiliser directement le IP de la machine virtuelle:

 $(docker-machine ip default)

, Comme , a commenté par ddc:

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

 VBoxManage showvminfo boot2docker-vm | grep "NIC.* Rule" 
44
répondu VonC 2017-08-27 15:20:18

Avec les versions récentes de la 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 de la machine virtuelle.

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

docker-machine ssh default -f -N -L 27017:localhost:27017
  • - f demande à ssh d'aller en arrière-plan juste avant l'exécution de la commande.
  • -N autoriser la commande vide (utile ici pour transférer les ports uniquement)
21
répondu David 2016-01-18 13:53:31

Vous pouvez ssh dans la machine et transmettre les arguments de redirection de port réguliers:

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

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

17
répondu Stijn 2015-10-03 19:29:44

Comme 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

Cela redirigera le port docker 8080 vers le port hôte 8080 en arrière-plan (ajoutez -f pour le faire fonctionner au premier plan). Pour utiliser un port hôte différent, faites simplement:

$ pf 8090:8080

Qui mappe le port hôte 8090 à 8080.

Pour arrêter la redirection de port ajouter -s:

$ pf 8090:8080 -s

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

7
répondu Johan 2016-04-08 08:20:34

Si vous ne voulez pas avoir besoin d'utiliser des mots de passe, j'ajouterais que vous devriez simplement pointer vers la clé privée.

ssh -L 8080:localhost:8080 -i ~/.docker/machine/machines/default/id_rsa docker@$(docker-machine ip default)
3
répondu leonfs 2015-10-27 17:00:28

Juste pour améliorer dans le script la réponse de @VonC-actuellement si vous utilisez Docker Toolbox sur MacOS X, la machine VM par défaut est "default". Donc, un script pour mapper tous les exposés du conteneur devrait ressembler à:

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 suppose que vous avez déjà transféré Les ports du conteneur vers la machine virtuelle.

docker port cassandra

Donne la sortie comme:

7000/tcp -> 0.0.0.0:7000
1
répondu npenkov 2016-01-12 19:50:03