Docker HTTP-requests between containers

node.jsHttpDockerRequest

node.js Problem Overview


I'm at the first stage in learning how to use Docker so I'm trying basic things. I've created two Node Express services that need to exchange data via HTTP-requests.

My docker-compose.yml file

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 uses the request module to make a POST-request to 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
            });

The result of this call is:

> { Error: connect ECONNREFUSED 172.18.0.3:10010}

Using postman I can test service2 at http://localhost:10010/api/ and I can confirm they actually can be reached and work as expected.

I'm missing something but can't figure it out. What is going wrong here?

node.js Solutions


Solution 1 - node.js

See the document. The port 10010 is a host port but not container port. You should use 9000 when you access service2 container directly.

So just change "http://service2:10010/api/" to "http://service2:9000/api/" and it will work.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGavelloView Question on Stackoverflow
Solution 1 - node.jsPhilip TzouView Answer on Stackoverflow