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

14
使用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服务已经正确初始化)。

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

2个回答

15
请注意,links现在是Docker的遗留功能(请参见文档)。
当您在单个docker-compose文件中声明多个服务时,它们实际上位于同一网络中(无论是默认网络还是用户定义的网络)。因此,诀窍是使用您的服务名称而不是本地主机名。然后使用您的原始示例:
version: '2'
services:
  api:
    image: api
    ports:
      - "8080:8080"
  sqs:
    image: pakohan/elasticmq

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


9
尝试通过告诉api容器它实际上连接到localhost来欺骗它连接到sqs是行不通的。您需要使sqs在没有特殊含义的名称下对api可用,例如:
links:
    - sqs:original-name

甚至更多:
links:
    - sqs

这使得sqs以名称"sqs"的形式对api可访问。

然后,您需要告诉api连接到original-namesqs的9324端口,而不是localhost的9324端口。如何实现取决于api的实际情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接