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

csc*_*can 2 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
Run Code Online (Sandbox Code Playgroud)

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

links:
  - "sqs:localhost"
Run Code Online (Sandbox Code Playgroud)

并暴露sqs的端口:

ports:
  - "9324:9324"
Run Code Online (Sandbox Code Playgroud)

但似乎都不起作用.尝试与sqs服务通信时,API始终会收到连接拒绝错误.

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

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

jwo*_*der 8

试图通过告诉它实际连接到api容器来欺骗容器sqs连接localhost是不行的.您需要sqs使用api一个尚未具有特殊含义的名称,例如:

links:
    - sqs:original-name
Run Code Online (Sandbox Code Playgroud)

甚至:

links:
    - sqs
Run Code Online (Sandbox Code Playgroud)

这使得" " 的名称可以sqs访问.apisqs

然后,当然,您需要告诉api它应该连接到端口9324 original-namesqs端口9324 localhost.你如何做到这一点取决于api实际情况.


use*_*304 7

请注意,这links是 Docker 现在的遗留功能(请参阅文档)。

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

version: '2'
services:
  api:
    image: api
    ports:
      - "8080:8080"
  sqs:
    image: pakohan/elasticmq
Run Code Online (Sandbox Code Playgroud)

你只需要确保你所访问sqs,而不是localhost(你的SQS服务的主机名应该从字面上:sqs