【发布时间】:2020-01-12 03:51:11
【问题描述】:
如何让 docker 自动服务发现在基于 AWS ECS EC2 的集群服务中工作?
我有这个对应的docker-compose.yml(我将其映射到与 ECS 兼容的task-definition.json 文件):
version: "3"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.2.2
environment:
- discovery.type=single-node
mongo:
image: mongo:4.0.12
redis:
image: redis:5.0.3
api:
image: api
build: .
command: api.py
depends_on:
- elasticsearch
- mongo
- redis
ports:
- 5000:5000
如果我使用docker-compose up docker-composer 启动它,将创建一个新的私有桥接网络。在此专用网络中,“自动服务发现”已开启,服务名称解析为服务 IP 地址。例如,api 可以在不知道其 IP 的情况下通过 DNS 查找“mongo”来找到 mongo。该网络也与其他不相关的容器隔离。您也可以像这样通过docker 手动执行此操作:
docker network create api-net
docker run -d --name elasticsearch --net api-net docker.elastic.co/elasticsearch/elasticsearch:6.2.2
docker run -d --name mongo --net api-net mongo:4.0.12
...
但我不知道如何通过使用task-definition.json 文件定义的 AWS ECS 多容器服务来实现相同的目标。如果我使用“桥”网络定义多个服务,所有容器都会启动到默认的桥网络中,并且自动服务发现不起作用。我可以手动登录ECS EC2容器实例并设置私有网络,但显然不是一个可行的解决方案。
【问题讨论】:
-
我也有同样的问题。你找到解决办法了吗?
-
还没有。这里的一个答案表明(但没有提供足够好的背景以达到 100%)您无法摆脱 ECS 中的默认桥 NW :/.
标签: docker docker-compose amazon-ecs