Невозможно подключиться к докер-контейнеру Postgres из контейнера Django

services:
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    ports:
      - "5432:5432"
  backend:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    environment:
      - POSTGRES_NAME=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    depends_on:
      - db

Вот конфигурация докера. Проблема в том, что бэкенд (Django) не может подключиться к БД postgres. Я пробовал с хостом БД как localhost и он не смог подключиться.

could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?

Затем я изменил хост на ip-адрес контейнера db, но все еще без успеха, на этот раз это была ошибка таймаута.

could not connect to server: Connection timed out
Is the server running on host "172.11.0.2" and accepting
TCP/IP connections on port 5432?

Вот как я подключаюсь к postgres.

from sqlalchemy import create_engine

engine = create_engine("postgresql+psycopg2://postgres:postgres@172.11.0.2:5432/postgres",
                       poolclass=QueuePool,
                       pool_size=5,
                       max_overflow=10,
                       pool_timeout=1)

Я думаю, что это точно как-то связано с тем, что два контейнера разные, но может ли кто-нибудь помочь мне, как подключиться к контейнеру Postgres из контейнера Django?

Любая служба может связаться с любой другой службой по имени этой службы.

В docker-compose сервисы отображаются друг на друга по их имени. Поэтому в хосте нужно использовать db, которое является именем службы базы данных.

Для получения более подробной информации ознакомьтесь с документами

Вернуться на верх