web-dev-qa-db-fra.com

Connectez-vous à l'hôte mongodb à partir du conteneur Docker

Je souhaite donc me connecter à mon mongodb s'exécutant sur ma machine hôte (DO droplet, Ubuntu 16.04). Il fonctionne sur le port par défaut 27017 sur localhost.

J'utilise ensuite mup pour déployer mon application Meteor sur mon droplet DO, qui utilise docker pour exécuter mon application Meteor à l'intérieur d'un conteneur. Jusqu'ici, tout va bien. Une URL de connexion mongodb://... standard est utilisée pour connecter l'application à mongodb . J'ai maintenant le problème suivant:

mongodb://...@localhost:27017... ne fonctionne évidemment pas à l'intérieur du conteneur de menu fixe, car localhost n'est pas l'hôte local de l'hôte.

J'ai déjà lu de nombreux articles sur stackoverflow, j'ai déjà essayé d'utiliser:

  • --network="Host" - n'a pas fonctionné comme il était dit que 0.0.0.0:80 est déjà utilisé ou quelque chose comme ça (proxy nginx)
  • --add-Host="local:<MY-DROPLET-INTERNET-IP>" et se connecter via mongodb://...@local:27017...: ne fonctionne pas non plus, car je peux accéder à mon mongodb uniquement à partir de localhost, pas à partir de l'adresse IP publique

Cela doit être un problème commun!

tl; dr - Quelle est la manière appropriée d'exposer les hôtes localhost à l'intérieur d'un conteneur de menu fixe afin que je puisse me connecter aux services en cours d'exécution sur l'hôte? (y compris leurs ports, par exemple 27017).

J'espère que quelqu'un peut aider!

7
Patrick DaVader

Vous pouvez utiliser: 172.17.0.1 car il s’agit de l’ip de l’hôte par défaut que les conteneurs peuvent voir. Mais vous devez configurer Mongo pour écouter 0.0.0.0.

À partir du docker 18.03 la recommandation est de se connecter au nom DNS spécial Host.docker.internal

Pour les versions précédentes, vous pouvez utiliser les noms DNS docker.for.mac.localhost ou docker.for.windows.localhost.

17
Robert

modifiez le bindIp de 127.0.0.1 à 0.0.0.0 dans /etc/mongod.conf. Alors ça va marcher

0
Siva S