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服务正在初始化正确).
有没有人对如何解决这个问题有任何想法?
试图通过告诉它实际连接到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-name或sqs端口9324 localhost.你如何做到这一点取决于api实际情况.
请注意,这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)
| 归档时间: |
|
| 查看次数: |
7746 次 |
| 最近记录: |