Docker Compose - 容器接收连接被拒绝

时间:2016-09-30 00:08:04

标签: docker docker-compose

使用docker-compose,我正在尝试在公共端口8080和私有端口9324上的sqs服务上运行我的API .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服务正在初始化正确)。

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

2 个答案:

答案 0 :(得分:8)

尝试欺骗api容器与sqs连接,告诉它实际连接到localhost并不能正常工作。您需要以sqs的名义向api提供不具有特殊含义的名称,例如:

links:
    - sqs:original-name

甚至:

links:
    - sqs

使sqs可以api访问名称" sqs"。

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

答案 1 :(得分:3)

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

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

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

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