Comment se connecter à l’alias de lien du conteneur docker à partir de l’hôte

J’ai 3 pièces distinctes à mon application dockerized:

  • nodeapp : node:latest conteneur docker exécutant une application expressjs qui renvoie un object JSON lorsqu’il est accessible depuis /api . Ce serveur est également compatible avec ce site .
  • nginxserver : Un nginx:latest serveur statique qui héberge simplement un fichier index.html qui permet à l’utilisateur de cliquer sur un bouton qui rend le XMLHttpRequest vers le serveur de noeud ci-dessus.
  • Ma machine hôte

Le node:latest a son port exposé à l’hôte via 3000:80 .

Le nginx:latest a son port exposé à l’hôte via 8080:80 .

De l’ hôte, je peux accéder à la fois à nodeapp et à nginxserver individuellement : je peux faire des requêtes et voir l’object JSON renvoyé par le serveur de noeud en utilisant curl depuis la ligne de commande et le bouton (index.html) est visible à l’écran localhost:8080 .

Cependant, lorsque j’essaie de cliquer sur le bouton, l’appel à XMLHttpRequest('GET', 'http://nodeapp/api', true) échoue sans apparemment toucher le serveur nodeapp (aucun journal n’est présent). Je suppose que c’est parce que l’ hôte ne comprend pas http://nodeapp/api .

Y a-t-il un moyen de dire à docker que pendant qu’un conteneur est en cours d’exécution pour append son conteneur liant l’alias à mon fichier hosts?

Je ne sais pas si ma question est la solution appropriée à mon problème. Il semble que je reçoive une erreur COR, mais je ne pense pas qu’elle frappe mon serveur. Est-ce que cela concerne l’access à l’application depuis mon ordinateur hôte?

Voici un lien vers un exemple de repo

Edit : J’ai remarqué que lorsque vous utilisez la stack, cliquer sur le bouton envoie une réponse de mon conteneur nginx . Je suis confus quant à pourquoi il achemine via ce serveur que le nodeapp est dans mon fichier hosts afin qu’il devrait reconnaître la corrélation là-bas?

Problème :

nodeapp existe dans le réseau interne, visible uniquement par votre nginxserver , vous pouvez le vérifier en entrant nginxserver

 docker exec -it nginxserver bash # cat /etc/hosts 

Plus important encore, la configuration de votre service n’est pas correcte, nginxserver agira en tant que proxy inverse devant nodeapp

 host (client) -> nginxserver -> nodeapp 

Solution rapide sale :

Si vous voulez vraiment que votre client ( hôte ) accède à l’application interne nodeapp , alors vous changez simplement le code ci-dessous

 XMLHttpRequest('GET', 'http://nodeapp/api', true) 

À

 XMLHttpRequest('GET', 'http://localhost:3000/api', true) 

Étant donné que dans votre docker-compose.yml , le port de service nodeapp 80 est exposé dans le réseau domestique au nodeapp 3000 , auquel vous pouvez accéder directement.

Meilleure solution

Vous devez repenser votre stack de services, pour que nginxserver noeud frontal, consultez un exemple: http://schempy.com/2015/08/25/docker_nginx_nodejs/