Docker-compose: контейнер приложения не может подключиться к Postgres - PullRequest
0 голосов
/ 31 мая 2018

Используя docker-compose, я пытаюсь просмотреть приложение Flask из manage.py runserver, которое соединяется с изображением postgres, но я получаю следующую ошибку:

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused
    Is the server running on host "0.0.0.0" and accepting
    TCP/IP connections on port 5432? 

МОЙ КОМПОЗИЦИОННЫЙ ФАЙЛ

version: '3.1'
services:
  app:
    build: .
    ports:
      - 5000:5000
    volumes:
      - /Users/sammy/Projects/my_flask_app:/my_flask_app
    container_name: my_flask_app_1
    depends_on:
      - db
    entrypoint: ["python", "manage.py", "runserver"]
  db:
    image: postgres:10
    restart: always
    container_name: my_app_db_1
    environment:
      POSTGRES_USER: ubuntu
      POSTGRES_PASSWORD: pickles
      POSTGRES_DB: db
    ports:
      - 5432:5432

ИЗ МОЕГО ПРИЛОЖЕНИЯ settings.py ФАЙЛ

POSTGRES = {
    'user': "ubuntu",
    'pw': "pickles",
    'db': "db",
    'host': os.getenv('IP', '0.0.0.0'),
    'port': '5432',
}
SQLALCHEMY_DATABASE_URI = 'postgresql://%(user)s:\
%(pw)s@%(host)s:%(port)s/%(db)s' % POSTGRES

Он создает и запускает приложение, а я могу зайти на сайт и посмотреть Werkzeugинтерпретатор трассировки.У меня не получается либо с конфигурацией самого контейнера Postgres, либо с подключением моего Flask к нему.

  • Верны ли переменные среды?
  • Нужно ли указывать том дляDB?Если так, то почему?Я не понял смысла этого, кроме как заправить имя пользователя / передать в переменные окружения.

1 Ответ

0 голосов
/ 31 мая 2018

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

POSTGRES = {
    'user': "ubuntu",
    'pw': "pickles",
    'db': "db",
    'host': "db",
    'port': '5432',
}
...