web-dev-qa-db-fra.com

Connectez-vous à docker-machine en utilisant 'localhost'

Il y a certaines fonctionnalités, comme les employés de service JavaScript sans https, qui ne fonctionnent que sur localhost, mais lorsque j'exécute mon application dans un conteneur de docker, en utilisant docker-compose, qui s'exécute sur docker-machine, je dois me connecter à l'aide de l'adresse que je reçois

docker-machine ip default

Existe-t-il un moyen de mapper localhost sur cette IP?

13
bigblind

Vous pouvez ajouter un port VirtualBox vers l'avant pour mapper un port sur l'hôte docker à votre machine locale.

En supposant que votre machine docker est appelée "par défaut" et que vous souhaitez mapper le port 80 de votre conteneur à localhost: 8888, vous pouvez exécuter:

vboxmanage modifyvm default --natpf1 "nameformapping,tcp,,8888,,80"

ou si le VM est en cours d'exécution

vboxmanage controlvm default natpf1 "nameformapping,tcp,,8888,,80"

Cela peut également être fait dans l'interface utilisateur de VirtualBox dans les paramètres de la machine virtuelle. Voici le document de VirtualBox https://www.virtualbox.org/manual/ch06.html#network_nat

Vous devrez également mapper le port de votre conteneur sur le port de la machine docker, vous le faites lorsque vous démarrez le conteneur (cela suppose également que vous avez une commande "EXPOSE 80" dans votre Dockerfile

docker run -p 80:80 mycontainer

https://docs.docker.com/engine/reference/run/

Voir également: https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

28
Kristofor Carle

La modification de votre fichier hosts fait que votre ordinateur local ne regarde directement que l'adresse IP spécifiée pour un domaine. Vous pouvez donc ajouter l'adresse IP du docker-machine à la etc\hosts fichier sur votre machine locale et mappez le port 80 sur votre conteneur au port 80 sur le docker-machine.

Exemple:

1) Obtenir l'adresse IP de l'hôte docker

$ docker-machine ip default
192.168.99.100

2) Ajoutez cette ligne à etc/hosts fichier sur votre machine locale

192.168.99.100 domain.com

3) Vérifiez que votre ordinateur résout le domaine.

$ ping domain.com
PING domain.com (192.168.99.100): 56 data bytes
64 bytes from 192.168.99.100: icmp_seq=0 ttl=64 time=0.294 ms
64 bytes from 192.168.99.100: icmp_seq=1 ttl=64 time=0.437 ms
64 bytes from 192.168.99.100: icmp_seq=2 ttl=64 time=0.556 ms
64 bytes from 192.168.99.100: icmp_seq=3 ttl=64 time=0.270 ms

Remarques:

  • Pour les utilisateurs Windows, le fichier hosts est localisé à C:\Windows\System32\Drivers\etc\hosts
  • Si vous souhaitez prendre en charge plusieurs domaines dans un seul docker-machine, vous pouvez créer un conteneur proxy avec nginx à l'intérieur de vos autres conteneurs.
14
Hemerson Varela

Le moyen le plus simple est de faire une redirection de port depuis la VBox

Paramètres-> Réseau-> Adaptateur 1-> Transfert de port

puis ajoutez le nom, dans l'hôte, ajoutez 127.0.0.1 (pour l'hôte local), puis les liaisons de port appropriées et redémarrez la machine virtuelle.

enter image description here

5
Xelian