【问题标题】:How do ECS Fargate type containers communicate between each others?ECS Fargate 类型的容器之间如何通信?
【发布时间】:2021-10-12 20:43:33
【问题描述】:

问题

ECS Fargate 容器之间如何通信?

情况

我使用 docker compose ecs 集成。
在 AWS docker 上下文中,docker compose up 进行了正确部署。
但是反向代理不能正常工作,可能是因为与容器通信

我的docker-compose.yml

version: '3'
services:
  nginx:
    image: {ACCOUNT}.dkr.ecr.{REGION}.amazonaws.com/{MY_IMAGE}
    ports:
      - "80:80"

  nodeapp:
    image: {ACCOUNT}.dkr.ecr.{REGION}.amazonaws.com/{MY_REACT_IMAGE}
    working_dir: /src
    command: sh -c "yarn install && yarn build && yarn start"
    ports:
      - "3000:3000"

我的 nginx.conf

server {
    listen 80;
    server_name localhost;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://localhost:3000/;
        # proxy_pass http://nodeapp:3000/; // works only for local
        # proxy_pass http://nodeapp.{MY CLUSTER}.local:3000/; // doesn't work

    }
}

我的理解

  1. 在同一个ECS服务中,容器之间可以通过localhost进行通信。
  2. 在不同的 ECS 服务中,容器之间可以通过服务发现进行通信。

这些是正确的吗?还有,我该怎么做?

1:同一个ECS服务

我一开始就尝试这样做。但是,docker compose up(ecs integration) 创建了不同的服务(对于 nginx 服务application(react) 服务。我该如何配置呢?

2:不同的服务

在 nginx conf 中,proxy_pass http:nodeapp.{MY_CLUSTER}.local:3000 无法正常工作。


ECS 容器之间如何通信?
让我知道最简单的方法。
提前致谢。

【问题讨论】:

    标签: docker docker-compose amazon-ecs nginx-reverse-proxy aws-fargate


    【解决方案1】:

    Docker 文档定义了它如何很好地工作。

    https://docs.docker.com/cloud/ecs-integration/#service-discovery

    您的理解

    1. 不,容器不会通过 localhost 相互通信。容器是将正在运行的进程与宿主进程分开的独立实体。除非以host 网络开始,否则它们无法访问主机操作系统,因此无法在自己的环回地址上看到对方。
    2. 通过 docker-compose 部署容器时,AWS 会设置必要的 DNS 以允许您的容器以与通常相同的方式(通过服务名称)以及通过 <service>.<compose_project_name>.local 进行连接。设置和解析此 DNS 可能需要一些时间,因此您的应用需要能够处理退避

    看来您对nodeapp.{MY_CLUSTER}.local:3000 的想法是正确的。您应该在部署中包含您看到的错误日志,以便进一步帮助您。

    请务必记住将您的撰写文件指定为版本3.8 以获得对 AWS 的全面支持?

    类似问题

    值得注意的是,这个问题之前已经被问过,并且在您搜索答案时很容易出现:

    Getting containers to talk to each other in Elastic Container Service (ECS)?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 2020-04-30
      • 2019-05-21
      • 1970-01-01
      • 2021-12-17
      • 2021-08-30
      • 1970-01-01
      相关资源
      最近更新 更多