容器

时间:2016-08-19 19:28:30

标签: node.js http docker request

我在学习如何使用Docker的第一阶段,所以我尝试了基本的东西。我创建了两个需要通过HTTP请求交换数据的Node Express服务。

我的docker-compose.yml档案

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使用request moduleservice 2发出POST请求。

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

此调用的结果是:

  

{错误:连接ECONNREFUSED 172.18.0.3:10010}

使用邮递员我可以在service2http://localhost:10010/api/进行测试,我可以确认他们确实可以到达并按预期工作。

我错过了一些东西,但无法弄清楚。这里出了什么问题?

1 个答案:

答案 0 :(得分:21)

See the document。端口10010是主机端口,但不是容器端口。当您直接访问service2容器时,应使用9000。

所以只需将"http://service2:10010/api/"更改为"http://service2:9000/api/"即可。