Какая строка подключения postgres в многоконтейнерном приложении AWS Docker? - PullRequest
0 голосов
/ 22 января 2019

Какую строку подключения Postgres мне следует использовать, если я запускаю многоконтейнерное приложение docker через Dockerrun.aws.js на AWS ?

У меня есть веб-приложение Node.JS / Postgres / docker.Postgres работает в своем собственном контейнере, как и приложение.Локально, приложение работает нормально.Когда я развертываю его на AWS через ECR и BeanStalk , приложение успешно развертывается и запускается, но веб-приложение не подключается к Postgres.

В docker-compose.yaml хост в строке подключения - это имя контейнера (в моем случае это будет db ).Это не работает с AWS .Также не localhost или 127.0.0.1.

Вот мой Dockerrun.aws.js:

{
  "AWSEBDockerrunVersion": 2,
  "volumes": [
    {
      "name": "db-data",
      "host": {
        "sourcePath": "/data/db"
      }
    }
  ],
  "containerDefinitions": [
    {
      "name": "db",
      "image": "db_image_name",
      "essential": true,
      "memory": 128,
      "environment": [
        {
          "name": "POSTGRES_USER",
          "value": "postgres"
        },
        {
          "name": "POSTGRES_PASSWORD",
          "value": "password"
        },
        {
          "name": "PGDATA",
          "value": "/data/db/pgdata"
        }
      ],
      "portMappings": [
        {
          "hostPort": 5432,
          "containerPort": 5432
        }
      ],
      "mountPoints": [
        {
          "sourceVolume": "db-data",
          "containerPath": "/data/db"
        }
      ]
    },
    {
      "name": "app",
      "image": "app_image_name",
      "essential": true,
      "memory": 128,
      "environment": [
        {
          "name": "NODE_ENV",
          "value": "production"
        },
        {
          "name": "DB_HOST",
          "value": "db"
        },
        {
          "name": "DB_PORT",
          "value": "5432"
        },
        {
          "name": "DB_PASSWORD",
          "value": "password"
        }
      ],
      "links": [
        "db"
      ],
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 3000
        }
      ]
    }
  ]
}

Что я должен поместить в переменную окружения DB_HOST ?( DB_HOST вместе с DB_PORT используются приложением для построения строки подключения.) Большое спасибо.

1 Ответ

0 голосов
/ 22 января 2019

В формате Beanstalk и Dockerrun.aws.json вы можете связать контейнеры из одного файла определения со следующим синтаксисом:

"links": ["some-name"]

В вашем случае вы можете добавить ссылку на "db", и postgres будет доступен в вашем контейнере приложения под db. Вам даже не нужно отображать порты контейнера, если вы не хотите показывать свой контейнер postgres миру.

Вы можете увидеть пример использования в следующих документах: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_v2config.html#create_deploy_docker_v2config_dockerrun

...