Как подключить контейнер Flask к контейнеру Postgresql в файле docker -compose? - PullRequest
0 голосов
/ 18 июня 2020

Я очень расстроен. Я пытаюсь подключить веб-сайт flask к базе данных PostgreSQL. Я сделал postgresql db отдельным контейнером и перепробовал все возможные способы подключения к нему. Чтобы не усложнять, мой файл flask имеет конфигурацию с таким uri:

SQLALCHEMY_DATABASE_URI = 'postgresql://user:password@0.0.0.0:5432/db'

Я пробовал localhost, 0.0.0.0, and 127.0.0.1 ни одна из которых не работает, что имеет смысл. Поскольку postgresql db - это еще один контейнер, они не могут подключиться к localhost. они должны быть подключены.

Соответствующая часть моего docker-compose.yml файла:

  db:
    image: postgres:10-alpine
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=db
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
    networks:
      db_network:
        aliases:
           - "pdb"

  webapp:
    build: .
    depends_on: [db]
    environment:
      - DEBUG=False
    ports:
      - "5000:5000"
    networks:
      - db_network

networks:
  db_network:
    driver: bridge

Хорошо, без ошибок. Итак, теперь я пробую использовать свой URI как SQLALCHEMY_DATABASE_URI = 'postgresql://user:password@pwd:5432/db', но я получаю сообщение об ошибке от webabb, что он не может перевести имя хоста, имя или неизвестную службу. В течение последних нескольких дней у меня либо возникали ошибки о том, что я не могу его найти, либо он не может подключиться.

1) Я удалил все локальные экземпляры postgresql 2) Я получил избавился от моего объема, я не был уверен, что это вызывает проблемы 3) Я пробовал разные порты 4) Я попробовал довольно много предложений здесь по SO об очистке осиротевших контейнеров и тому подобном.

Я использовал проверку сети но это давало жестко закодированный IP-адрес, который, я думаю, можно изменить. Я в полном тупике. Может кто подскажет? Я хотел бы полностью стереть Postgresql, а затем настроить сеть, чтобы она заработала. Затем я добавлю объем. Чтобы прояснить, у меня нет никаких конфигурационных файлов для postgres сверх того, что я устанавливаю в файле docker -compose, но у меня он работал в какой-то момент в прошлом, поэтому Я полагаю, мне это не нужно.

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Имя хоста контейнера postgres будет таким же, как имя службы, т.е. db в соответствии с вашим файлом набора. Поэтому вам нужно использовать строку подключения postgresql://user:password@db:5432/db

0 голосов
/ 18 июня 2020

Используйте ссылки для подключения к другим контейнерам.

db:
    image: postgres:10-alpine
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=db
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password

 webapp:
    build: .
    depends_on: [db]
    environment:
      - DEBUG=False
    ports:
      - "5000:5000"
    links:
      - "db:my_db"

, чтобы вы могли получить доступ к службе db с использованием my_db в качестве имени хоста для базы данных. надеюсь, что это полная помощь.

...