Подключение к базе данных 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/