【问题标题】:ECS Fargate application container cannot establish connection with Postgres database containerECS Fargate 应用程序容器无法与 Postgres 数据库容器建立连接
【发布时间】:2022-07-28 19:34:35
【问题描述】:

我正在尝试使用 ecs-cli 将两个容器 docker compose 文件推送到 FARGATE ECS。这仅适用于预览环境。第一个容器是postgres:12,第二个是hasura/graphql-engine:v1.3.3

docker-compose.yml 如下所示

version: '3'
services:
  postgres:
    image: postgres:12
    ports:
      - "5432:5432"
    restart: always
    volumes:
    - db_data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: postgrespassword
    logging:
      driver: awslogs
      options:
         awslogs-group: tutorial
         awslogs-region: us-east-1
         awslogs-stream-prefix: postgres

  graphql-engine:
    image: hasura/graphql-engine:v1.3.3
    ports:
      - "80:80"
    depends_on:
      - "postgres"
    restart: always
    environment:
      HASURA_GRAPHQL_DATABASE_URL: postgres://postgres:postgrespassword@127.0.0.1:5432/postgres
      ## enable the console served by server
      HASURA_GRAPHQL_ENABLE_CONSOLE: "true" # set to "false" to disable console
      ## enable debugging mode. It is recommended to disable this in production
      HASURA_GRAPHQL_DEV_MODE: "true"
      HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log
      ## uncomment next line to set an admin secret
      # HASURA_GRAPHQL_ADMIN_SECRET: myadminsecretkey
    logging:
      driver: awslogs
      options:
         awslogs-group: tutorial
         awslogs-region: us-east-1
         awslogs-stream-prefix: hasura
volumes:
  db_data:

ecs-params.yml 如下所示

version: 1
task_definition:
  ecs_network_mode: awsvpc
  task_role_arn: "arn:aws:iam::***:role/ecsTaskExecutionRole"
  task_execution_role: "arn:aws:iam::***:role/ecsTaskExecutionRole"
  task_size:
    cpu_limit: "256"
    mem_limit: "512"

run_params:
  network_configuration:
    awsvpc_configuration:
      subnets:
        - "subnet-***"
        - "subnet-***"
      security_groups:
        - "sg-***"
      assign_public_ip: "ENABLED"

我正在使用以下命令行调用来触发推送

ecs-cli compose  --file docker-compose.yml --ecs-params ecs-params.yml --debug service up --deployment-max-percent 100 --deployment-min-healthy-percent 0 --region us-east-1 --cluster "{ARN CLUSTER VALUE}" --create-log-groups --launch-type "FARGATE"

在 ECS 中,我可以看到新服务已创建,其 1 Fargate 任务正在启动。如果我打开任务,容器将从 PENDING -> RUNNING 移动。一段时间后,应用程序容器移动到 STOPPED,然后最终数据库容器也移动到 STOPPED。一旦发生这种情况,任务就会停止,新任务会经历相同的循环。

这是应用程序容器的日志

这是数据库容器的日志

在 docker-compose 中,我尝试将 PG 数据库连接字符串的环境变量更改为 postgres://postgres:postgrespassword@127.0.0.1:5432/postgres 和 postgres://postgres:postgrespassword@localhost:5432/postgres,两者都会导致相同的问题。

知道这里会发生什么吗?这是来自这篇文章的启发:https://dev.to/raphaelmansuy/10-minutes-to-deploy-a-docker-compose-stack-on-aws-illustrated-with-hasura-and-postgres-3f6e 唯一的区别是文章使用的是 EC2,而不是 Fargate。

【问题讨论】:

    标签: postgresql docker-compose amazon-ecs aws-fargate


    【解决方案1】:

    尝试添加

        links:
         - postgres
    

    到您的 graphql-engine 服务,而不是似乎不适用于 AWS ECS 的depends_on。

    【讨论】:

      猜你喜欢
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 2018-02-25
      • 2019-11-15
      • 2016-09-22
      • 1970-01-01
      相关资源
      最近更新 更多