【问题标题】:docker-compose make requests between containersdocker-compose 在容器之间发出请求
【发布时间】:2018-08-24 19:40:34
【问题描述】:

我对 docker-compose 有点陌生,所以我什至不确定我在寻找什么。

我创建了两个图像,并使用 docker-compose 在本地环境中运行它们,这两个服务通过 HTTP 请求进行通信(两者都在 localhost 上运行,一个服务在端口 3000 上,一个服务在端口 8000 上)

当我将这两个服务移至 docker(两个独立的容器和图像)时,我似乎无法让它们通信。

这是我的 docker-compose 文件:

version: '3'

services:
  service1:
    image: services/services1
    ports:
      - 3000:3000
    links:
      - "service2"
    depends_on:
      - service2

  service2:
    image: services/service2
    ports:
      - 8000:8000

当我直接向每个服务发出 http 请求时,我得到了很好的响应,但是当我向 service1 发出请求并且在 services1 中我有另一个对服务 2 的请求时,我无法得到响应完全没有

Error: connect ECONNREFUSED 127.0.0.1:8000

这两个服务都在 0.0.0.0 上运行

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    所以我什至不确定我在寻找什么。

    您很可能正在寻找the docker documentation 的这一部分。它解释了 docker compose 如何处理网络。您特别感兴趣的部分是:

    By default Compose sets up a single network for your app.
    Each container for a service joins the default network and is both reachable
    by other containers on that network, and discoverable by them 
    at a hostname identical to the container name.
    

    意味着您应该使用 service1 和 service2 而不是 localhost 来定位跨服务。

    【讨论】:

    • 所以只是为了确保我理解,因为我没有完全为我工作,如果我使用 JS,例如,我应该做这样的事情axios.get('http://service2/api/status') ?跨度>
    • 或者用service2:8000替换service2以防你使用指定端口,是的......
    【解决方案2】:

    docker-compose.yml 文件中声明的所有服务都在它们自己的容器中运行。他们有不同的ip。您可以使用将解析为服务 ip 的服务名称来解决它们。 在你的情况下:

    docker-compose exec service1 ping service2
    or
    docker-compose exec service2 ping service1
    

    【讨论】:

      【解决方案3】:

      您应该定义一个网络并使用服务的名称而不是本地主机:

      version: '3'
      
      services:
        service1:
          image: services/services1
          ports:
            - 3000:3000
          links:
            - "service2"
          depends_on:
            - service2
          networks:
            - mynet
      
        service2:
          image: services/service2
          ports:
            - 8000:8000
          networks:
            - mynet
      
      networks:
        mynet:
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-15
        • 1970-01-01
        • 2023-02-09
        • 1970-01-01
        • 2016-12-27
        • 2019-10-10
        • 1970-01-01
        • 2021-03-10
        相关资源
        最近更新 更多