Node.js 容器之间的Docker HTTP请求

Node.js 容器之间的Docker HTTP请求,node.js,http,docker,request,Node.js,Http,Docker,Request,我正处于学习如何使用Docker的第一阶段,所以我正在尝试一些基本的东西。我创建了两个需要通过HTTP请求交换数据的节点Express服务 Mydocker compose.ymlfile networks: isolation-network: driver: bridge services: service1-nodejs: build: context: ./service1/ dockerfile: .docker/node.dockerfile

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

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
使用向
service2
发出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
            });
此调用的结果是:

{错误:connect ECONREFUSSED 172.18.0.3:10010}

使用邮递员,我可以在
http://localhost:10010/api/
,我可以确认他们确实可以联系到,并按预期工作

我遗漏了一些东西,但我想不出来。这里出了什么问题?

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


所以只需更改
”http://service2:10010/api/“
”http://service2:9000/api/“
它会工作。

+您需要将容器链接到other@JohannesMerz他使用网络,并将“服务2”解析为“172.18.0.3”。我正在使用网络,因此不需要通过使用容器的内部端口进行链接。我的问题解决了。
http/
?@DanNissenbaum有趣的。。。我以为我有冒号,问题也在冒号上。。。