如何在基于AWS ECS EC2的集群服务中使用docker自动服务发现?
我有这个对应的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 可以通过对“ mongo”进行DNS查找来找到 mongo 而无需知道其IP。网络也与其他不相关的容器隔离。您也可以像这样通过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容器实例并设置专用网络,但显然不是可行的解决方案。
答案 0 :(得分:1)
您需要使用:
"links": ["name:internalName", ...]
在Network Settings
下查看更多here
也请参阅此注释:
重要
并置在单个容器实例上的容器可以是 无需链接或主机即可彼此通信 端口映射。在容器实例上实现网络隔离 使用安全组和VPC设置。