AWS ECS如何在专用网桥中启动容器

时间:2019-09-10 11:32:49

标签: docker docker-compose amazon-ecs

如何在基于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容器实例并设置专用网络,但显然不是可行的解决方案。

1 个答案:

答案 0 :(得分:1)

您需要使用:

"links": ["name:internalName", ...]

Network Settings下查看更多here

也请参阅此注释:

  

重要

     

并置在单个容器实例上的容器可以是   无需链接或主机即可彼此通信   端口映射。在容器实例上实现网络隔离   使用安全组和VPC设置。