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
?
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";
docker-machine info
pour obtenir le nom de votre vm.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)
Vous pouvez vérifier que la redirection de port est correctement configurée avec
VBoxManage showvminfo boot2docker-vm | grep "NIC.* Rule"
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
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 )
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 .
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)
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