Подключение к базе данных postgres внутри контейнера docker из django, запущенного на хост-машине

У меня есть база данных postgres, запущенная внутри контейнера с подключенным к ней pgadmin, docker-compose.yml выглядит следующим образом:

postgres:
  image: postgres:13.0-alpine
  volumes:
    - postgres:/var/lib/postgresql/data
  ports:
    - "5432:5432"
  env_file:
    - $ENV_FILE

pgadmin:
  image: dpage/pgadmin4
  volumes:
    - pgadmin:/var/lib/pgadmin
  ports:
    - "${PGADMIN_PORT:-5050}:80"
  restart: unless-stopped
  depends_on:
    - postgres
  env_file:
    - $ENV_FILE

мои настройки базы данных django следующие:

DATABASES = {
    "default": {
        "ENGINE": os.environ.get("POSTGRES_ENGINE", "django.db.backends.postgresql"),
        "NAME": os.environ.get("POSTGRES_NAME", "postgres"),
        "USER": os.environ.get("POSTGRES_USER", "admin"),
        "PASSWORD": os.environ.get("POSTGRES_PASS", "admin"),
        "HOST": os.environ.get("POSTGRES_HOST", "127.0.0.1"),
        "PORT": os.environ.get("POSTGRES_PORT", "5432"),
    }
}

Отслеживание:

Абсолютно не знаю, что происходит, так как в моем env-файле точно такой же пароль, как и в settings.py в моем проекте django.

Для ясности, я запускаю контейнеры postgres в docker, а затем пытаюсь запустить тестовый сервер django локально на главной машине, и ошибка возникает при запуске.

Так что для всех, кто найдет это, мне очень помогла эта тема; Подключение к Postgresql в контейнере docker извне

Проблема оказалась в том, что по какой-то причине порт 5432 использовался, я думаю, самим django (хотя, если кто-то знает реальный ответ, буду очень признателен), и решением было изменить отображение порта на другой порт, в моем случае:

postgres:
  ports:
    - "6543:5432"

Затем вы можете проверить, можете ли вы получить доступ к вашей базе данных postgres из терминала на хост-машине через uri следующим образом:

psql postgresql://<postgres_user_name>:<postgres_pass>@localhost:6543/postgres

Другая проблема, с которой я столкнулся, заключается в том, что для получения команды psql необходимо добавить postgres в путь переменных системного окружения следующим образом: %PROGRAMFILES%/PostgreSQL/<postgres_version_num>/bin/

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