Как подключить локально размещенное приложение Django к докеризованной базе данных Postgres

Я изучаю Docker и через некоторое время мне удалось запустить базу данных postgres и приложение django в двух разных контейнерах. Проблема в том, что с Docker я не могу использовать инструменты отладки Pycharm.

Так что я хотел бы запускать свой код без docker, но держать базу данных в его контейнере.

Но я не могу соединить Dockerized postgres dabatase и локально размещенное Django App. У меня всегда возникает эта ошибка :

Я знаю, что профессиональная версия Pycharm позволяет подключить отладочный инструмент к контейнеру docker, но у меня его нет

Я видел этот вопрос , который делает все наоборот, но я ничего не нашел для своей проблемы.

Вот как создается мой контейнер базы данных в docker-compose.yml (данные аутентификации используются только для локальной разработки):

version: "3.7"
   
services:
  db:
    container_name: customer_platform_database_local
    image: postgres
    volumes:
      - postgresPFC:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=pfcdb
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    hostname: db
    expose:
      - "5433" # Publishes 5433 to other containers but NOT to host machine
    ports:
      - "5433:5433"
    command: -p 5433
    restart: always
    ...

volumes:
  postgresPFC:

А вот и настройки моей базы данных в settings.py :

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'pfcdb',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'localhost',
        'PORT': 5433,
    }
}

Я пытался заменить параметр HOST на 127.0.0.1, 172.23.0.1 (это ip контейнера db, выданный с помощью docker inspect), но ни один из них не сработал (если я использую 172.23.0.1, у меня происходит таймаут)

У меня такая же проблема с подключением локального pgadmin 4 к контейнеризированной базе данных, но я ожидаю, что она будет решена тем же способом.

Вы можете упростить отображение порта на docker-compose.yml, перераспределив 5432 на 5433 для хоста.

При такой конфигурации я могу подключиться к базе данных pfcd с помощью dbeaver

version: "3.7"
   
services:
  db:
    container_name: customer_platform_database_local
    image: postgres
 volumes:
      - postgresPFC:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=pfcdb
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    hostname: db
    ports:
      - 5433:5432
    restart: always
volumes:
  postgresPFC:

Для ошибки соединения я подозреваю, что ошибка в имени драйвера не django.db.backends.postgresql но django.db.backends.postgresql_psycopg2 обратите внимание на финальную psycopg2

См. эту статью и официальные документы по хосту django

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'pfcdb',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'localhost',
        'PORT': 5433,
    }
}

Вы также должны проверить, не запущена ли на вашем хосте другая служба или экземпляр Postgres на том же порту 5433.

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