2016-08-19 4 views
4

Ich bin in der ersten Phase des Lernens, wie man Docker benutzt, also versuche ich grundlegende Dinge. Ich habe zwei Node-Express-Dienste erstellt, die Daten über HTTP-Requests austauschen müssen.Docker HTTP-Requests zwischen Containern

Meine docker-compose.yml Datei

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 verwendet die request module eine POST-Anfrage an service 2 zu machen.

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 
      }); 

Das Ergebnis dieses Aufrufs ist:

{ Error: connect ECONNREFUSED 172.18.0.3:10010}

Postbote Verwendung von I service2 bei http://localhost:10010/api/ testen können und ich kann bestätigen, dass sie tatsächlich wie erwartet erreicht und arbeiten werden.

Ich vermisse etwas, aber ich kann es nicht herausfinden. Was läuft hier falsch?

Antwort

8

See the document. Der Port 10010 ist ein Host-Port, aber kein Container-Port. Sie sollten 9000 verwenden, wenn Sie direkt auf service2 Container zugreifen.

Also ändern Sie einfach "http://service2:10010/api/" zu "http://service2:9000/api/" und es wird funktionieren.

+0

+ Sie müssen den Container in den anderen verknüpfen –

+0

@JohannesMerz Er nutzt Netzwerke und er bekam die "Service2" als "172.18.0.3" gelöst wird. –

+1

Ich benutze Netzwerke so Verknüpfung sollte nicht notwendig sein, mit dem internen Port des Behälters gelöst meine Frage – Gavello

Verwandte Themen