Si j'ai une base de données mysql en cours d'exécution sur une machine hôte et que cet hôte exécute également un conteneur docker: Comment accéder à la base de données mysql à partir du conteneur docker qui s'exécute sur l'hôte?.
Par exemple, existe-t-il un moyen de publier un port d'hôtes dans le conteneur (l'inverse de ce que fait docker run -p)?
Réponses:
Il y a plusieurs discussions de longue date sur la façon de le faire de manière cohérente, bien comprise et portable. Pas de résolution complète mais je vais vous connecter aux discussions ci-dessous.
Dans tous les cas, vous voudrez souvent essayer d'utiliser l'option --add-host pour docker run pour ajouter l'adresse IP de l'hôte dans le fichier / etc / host du conteneur. À partir de là, il est facile de se connecter à l'hôte sur n'importe quel port requis:
Documentation:
https://docs.docker.com/engine/reference/commandline/run/
Discussions sur l'accès à l'hôte à partir du conteneur:
https://github.com/docker/docker/issues/1143
https://github.com/docker/docker/issues/10023
la source
À partir de la documentation du 18.03:
EXEMPLE: voici ce que j'utilise pour ma chaîne de connexion MySQL dans mon conteneur pour accéder à l'instance MySQL sur mon hôte:
la source
À partir de Docker 17.06, un nom DNS spécial pour Mac uniquement est disponible dans des conteneurs Docker qui se résout en l'adresse IP de l'hôte. C'est:
docker.for.mac.localhost
La documentation est ici: https://docs.docker.com/docker-for-mac/networking/#httphttps-proxy-support
la source
docker.for.mac.host.internal
àDocker 17.12.0 ce
partir de là. docs.docker.com/docker-for-mac/release-notes/…docker.for.mac.localhost
travaille sur18.03.1-ce-mac65
Utilisez host.docker.internal à partir de Docker 18.03.
la source
Docker version 18.03.0-ce, build 0520e24
18.03.1-ce-mac65
D'autres réponses n'ont pas bien fonctionné pour moi. Mon conteneur n'a pas pu résoudre l' adresse IP de l'hôte à l'aide de host.docker.internal . Il y a deux façons
Partage du réseau hôte --net = hôte:
En utilisant l'adresse IP de docker, qui est généralement 172.17.0.1 . Vous pouvez le vérifier en appelant la commande ifconfig et en saisissant inet addr de l'interface docker
Une fois que vous avez cette adresse IP, vous pouvez la passer comme argument à docker run puis à l'application ou comme je le fais, mapper l'emplacement de jdbc.properties via le volume au répertoire sur la machine hôte, afin que vous puissiez gérer le fichier en externe .
REMARQUE: votre base de données peut ne pas autoriser les connexions externes. Dans le cas de postgresql, vous devez éditer 2 fichiers, comme décrit ici et ici :
Modifiez postgresql.conf pour écouter sur toutes les adresses. Par défaut, il pointera vers localhost.
Modifiez pg_hba.conf pour autoriser les connexions à partir de toutes les adresses. Ajoutez sur la dernière ligne:
IMPORTANT: la dernière étape de mise à jour de l'accès à la base de données n'est pas recommandée pour une utilisation en production, sauf si vous êtes vraiment sûr de ce que vous faites.
la source