【问题标题】:Docker Compose - container receiving connection refusedDocker Compose - 容器接收连接被拒绝
【发布时间】:2020-06-26 16:12:35
【问题描述】:

使用 docker-compose,我试图在公开可用的端口 8080 上运行我的 API,并在私有可用的端口 9324 上运行 sqs 服务。API 需要能够与 sqs 服务通信。为此,我设置了以下 docker-compose.yml:

version: '2'
services:
  api:
    image: api
    ports:
      - "8080:8080"
  sqs:
    image: pakohan/elasticmq

我已经尝试了几次迭代,包括为 api 添加链接别名:

links:
  - "sqs:localhost"

并为 sqs 暴露端口:

ports:
  - "9324:9324"

但似乎两者都不起作用。尝试与 sqs 服务通信时,API 总是收到连接被拒绝错误。

当 sqs 端口公开时,在 docker 之外运行的 API 能够正常通信(因此 sqs 服务正在正确初始化)。

有人对如何解决这个问题有任何想法吗?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    请注意,links 现在是 Docker 的旧功能 (see Docs)。

    当您在单个docker-compose 文件中声明多个服务时,它们实际上将位于同一个网络中(无论是默认网络还是用户定义的网络)。然后诀窍是使用您的服务名称而不是本地主机。然后用你原来的例子:

    version: '2'
    services:
      api:
        image: api
        ports:
          - "8080:8080"
      sqs:
        image: pakohan/elasticmq
    

    您只需要确保您访问的是sqs 而不是localhost(您的 sqs 服务的主机名应该是:sqs

    【讨论】:

      【解决方案2】:

      试图欺骗api 容器连接到sqs,告诉它实际上连接到localhost 是行不通的。您需要使用尚无特殊含义的名称将 sqs 提供给 api,例如:

      links:
          - sqs:original-name
      

      甚至:

      links:
          - sqs
      

      这使得api 可以在名称“sqs”下访问sqs

      然后,当然,您需要告诉api,它应该连接到original-namesqs 的端口9324,而不是localhost 的端口9324。你如何做到这一点取决于api 实际上是什么。

      【讨论】:

        猜你喜欢
        • 2018-10-23
        • 2021-10-12
        • 2017-05-09
        • 1970-01-01
        • 2016-03-08
        • 2017-08-05
        • 2020-09-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多