【问题标题】:Docker HTTP-requests between containers容器之间的 Docker HTTP 请求
【发布时间】:2016-12-27 01:11:54
【问题描述】:

我正处于学习如何使用 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}

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

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

【问题讨论】:

    标签: node.js http docker request


    【解决方案1】:

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

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

    【讨论】:

    • + 你需要将容器链接到另一个
    • @JohannesMerz 他使用网络,并且确实将“service2”解析为“172.18.0.3”。
    • 我正在使用网络,因此不需要使用容器的内部端口进行链接解决了我的问题
    • http//中真的没有:吗?
    • @DanNissenbaum 有趣...我以为我有冒号,问题也与冒号有关...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 2023-02-09
    • 2020-02-29
    • 1970-01-01
    相关资源
    最近更新 更多