2017-07-26 1 views
0

J'ai recherché cela il y a quelques jours et je n'arrive pas à trouver une solution. J'utilise .NET Core 1.1 et VS2017 avec Docker Tools. Lorsque je lance l'application avec l'option auto-hébergée ou IIS, tout est OK. J'utilise Ngpsql comme fournisseur de données pour PostgreSQL et la chose fonctionne très bien. Le problème apparaît lorsque je lance l'application en tant que conteneur avec Docker (l'image est sympa, le conteneur fonctionne sous Windows et Linux) car mon hôte PostgreSQL est localhost et l'application Core ne peut pas voir mon instance PostgreSQL locale (parce que pour le conteneur localhost est le conteneur lui-même et pas ma machine hôte). Je sais qu'il existe LOTS des tutoriels et des procédures pas à pas pour faire cela avec .NET Core et PSQL à travers Docker Compose (un conteneur pour chacun), je le sais. Je suppose qu'ils fonctionnent très bien MAIS les exigences pour ce travail sont que l'application Core conteneurisée lise/écrive des données à partir d'un serveur PostgreSQL installé localement.Connectez l'application .NET Core MVC/WebAPI conteneurisée à Postgres installé localement

En production, le Core Container et le PostgreSQL installé localement seront dans la même machine avec la même adresse. Je sais que cela doit être un paramètre simple ou quelque chose comme ça, mais je ne veux pas perdre la portabilité du conteneur Docker en utilisant la chaîne de connexion mon ip (développement) ip car le scénario de déploiement/exécution dans la production le serveur sera automatisé via Docker Cloud et autres.

Peut-être passer un paramètre? Exposer correctement le port du conteneur docker? Quelle? WHAAAT ?!

+0

Copie possible de [Depuis l'intérieur d'un conteneur Docker, comment me connecter à l'hôte local de la machine?] (Https://stackoverflow.com/questions/24319662/from-inside-of- a-docker-conteneur-comment-je-connecter-à-l'hôte-local-de-la-mach) – Ayushya

+0

Merci @Ayushya, allez tester cette réponse. –

+0

En fait qu'est-ce que le travail est cette réponse https://stackoverflow.com/questions/31249112/allow-docker-container-to-connect-to-a-local-host-postgres-database. S'il vous plaît marquer comme doublon ou quelque chose comme ça (je ne connais pas le terme exact). J'ai suivi ces étapes et fonctionne. –

Répondre

0

Vous pouvez ajouter ce code à votre entrypoint:

echo $(netstat -nr | grep '^0\.0\.0\.0' | awk '{print $2}') dockerhost >> /etc/hosts 

Le script récupère l'adresse IP de la passerelle à l'intérieur du conteneur. Étant donné que votre conteneur accède (probablement) à Internet via la machine hôte, l'adresse IP de la passerelle sera l'adresse IP de la machine hôte sur tout réseau partagé par l'hôte et le conteneur. Il ajoute ensuite une entrée dans le fichier hosts des conteneurs afin que vos scripts puissent se référer à l'adresse IP de l'hôte par son nom (arbitrairement «dockerhost» dans ce cas). L'exécution du script dans le point d'entrée vous permet d'obtenir la bonne adresse IP même si vous déployez une image sur un hôte docker avec une configuration réseau légèrement différente car l'entrée hosts est configurée lorsque le conteneur s'exécute, et non lorsque l'image est construit

Source: Reddit. Pour plus d'informations, voir here