部署到 ECS Fargate 时,如何 link 为 docker-compose v3 文件中定义的 HTTP 通信服务?

How to link services for HTTP communication defined in docker-compose v3 file when deploying to ECS Fargate?

我有一个 docker-compose v3 文件(见下文),用于在本地部署和测试我的开发进度。它就像一个魅力 - 在我的机器上。如您所见,我使用默认的 bridge 网络类型进行内部服务 HTTP 调用。这使我能够无缝地 "connect" 我的 docker-compose 文件中定义的服务,只需使用 docker-compose 文件中定义的服务名称作为其域名,如下例所示。

现在我想利用相同的 docker-compose 文件在 AWS ECS 中部署(使用 Fargate 容器)。我正在使用 ecs-cli 来实现这个 atm。

问题是在 ECS 中,网络服务 IP 无法通过 docker-compose 服务名称解析。那么如何让我的服务知道彼此的 IP 地址或域名呢? docker-compose 文件中应该定义哪些环境变量值?解决这个问题的常用方法有哪些?解决此问题的最佳方法是什么?

我使用 AWS ECR 作为 docker 图像存储库。我的 docker-compose 文件如下所示:

version: "3.7"
services:

  service1:
    image: myAwsAccount.dkr.ecr.eu-middle-42.amazonaws.com/service1:staging
    container_name: service1-composed
    ports:
      - 4001:4001
    environment: 
      - ExtractUrl=http://service3:2001/api
      - ReportingUrl=http://service1:4001/api/reporting
      - RestorationUrl=http://service2:3000/api
      - CORE_URL=http://0.0.0.0:4001

  service2:
    image: myAwsAccount.dkr.ecr.eu-middle-42.amazonaws.com/service2:staging
    container_name: service2-composed
    environment: 
      - COORDINATOR_URL=http://service1:4001/api/coordinator

  service3:
    image: myAwsAccount.dkr.ecr.eu-middle-42.amazonaws.com/service3:staging
    container_name: service3-composed
    environment: 
      - COORDINATOR_URL=http://service1:4001/api/coordinator
      - CORE_URL=http://service1:4001/api/core

根据https://aws.amazon.com/blogs/compute/task-networking-in-aws-fargate/ default network mode for aws fargate tasks is awsvpc, which has default network loopback interface, meaning you can make internal http calls to well known address http://127.0.0.1