node.js - 容器之间的 Docker HTTP 请求

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

这个调用的结果是:

{ Error: connect ECONNREFUSED 172.18.0.3:10010}

使用 postman ,我可以在 http://localhost:10010/api/ 测试 service2,我可以确认它们实际上可以到达并按预期工作。

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

最佳答案

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

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

关于node.js - 容器之间的 Docker HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39046413/

相关文章:

node.js - Express 路由器不调用返回空 obj 的 get 请求

java - 尝试从我的网络服务器下载 exe 时出现 403 错误

java - Netty 中是否有类似 transferFrom 的零拷贝功能?

scala - 如何在 docker 中加速 sbt scala 构建?

java - Docker:将证书插入 keystore

ruby-on-rails - 为什么我的 Rails 容器没有连接到我的 Postgres 容器?

javascript - Nodejs - 设置不同的 api 版本

javascript - 流结束后调用异步请求

javascript - 我制作了一个 Discord.js 机器人,但是当我告诉它某人时,它会在 DM 中输入该人的 ID

最后一个字节的 HTTP 范围请求