容器之间的Docker HTTP请求 [英] Docker HTTP-requests between containers

查看:2049
本文介绍了容器之间的Docker HTTP请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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.

我的 docker-compose.yml file

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 使用请求模块服务2 发出POST请求。

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

此调用的结果是:


{错误:连接ECONNREFUSED 172.18.0.3:10010}

{ Error: connect ECONNREFUSED 172.18.0.3:10010}

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

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?

推荐答案

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

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

所以只需更改http :// service2:10010 / api /http:// service2:9000 / api /它会起作用。

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

这篇关于容器之间的Docker HTTP请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆