web-dev-qa-db-fra.com

Docker requêtes HTTP entre conteneurs

Je suis à la première étape de l'apprentissage de Docker, j'essaie donc les choses de base. J'ai créé deux Node services Express qui ont besoin d'échanger des données via des requêtes HTTP.

Mon docker-compose.yml fichier

networks:
  isolation-network:
    driver: bridge

services:
  service1-nodejs:
    build:
    context: ./service1/
    dockerfile: .docker/node.dockerfile
    ports:
      - "10000:9000" 
      - "10001:5858" 
    env_file: ./service1/.docker/env/app.${APP_ENV}.env
    networks:
      - isolation-network

  service2-nodejs:
    build:
    context: ./service2/
    dockerfile: .docker/node.dockerfile
    ports:
      - "10010:9000" 
      - "10011:5858" 
    env_file: ./service2/.docker/env/app.${APP_ENV}.env
    networks:
      - isolation-network

service1 utilise le module de requête pour faire une requête POST à ​​service 2.

request({ url: "http://service2:10010/api/",
                method: "POST",
                headers: { "Content-Type": "application/json" },
                json: true,
                body: { ... },
                time: true
            }, function (err, res, body) {
                if (!err && res.statusCode == 200) {
                    // success
                }

                // failed
            });

Le résultat de cet appel est:

{Erreur: connectez ECONNREFUSED 172.18.0.3:10010}

En utilisant Postman, je peux tester service2 à http://localhost:10010/api/ et je peux confirmer qu'ils peuvent être atteints et fonctionner comme prévu.

Je manque quelque chose mais je ne peux pas le comprendre. Qu'est-ce qui ne va pas ici?

21
Gavello

Voir le document . Le port 10010 est un port hôte mais pas un port conteneur. Vous devez utiliser 9000 lorsque vous accédez à service2 conteneur directement.

Alors changez simplement "http://service2:10010/api/" à "http://service2:9000/api/" et cela fonctionnera.

23
Philip Tzou