Как перенести Django из локального sqlite3 в контейнер postgresql Docker?

Я пытаюсь изучить Django с помощью нескольких демонстрационных проектов и хочу перейти с sqlite3 на локальный контейнер postgresql для работы с разработчиками. Когда я пытаюсь запустить uv run python manage.py migrate, я получаю следующее исключение:

django.db.utils.OperationalError: connection failed: connection to server at "127.0.0.1", port 5432 failed: FATAL:  password authentication failed for user "myuser"

Пока контейнер запущен, база данных доступна через psql, и мой pg_hba.conf, похоже, должен разрешать аутентификацию:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

host all all all scram-sha-256

Я создаю и запускаю свой контейнер postgresql с помощью:

docker run --name=db_container -d -e POSTGRES_DB=mydatabase -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword -p 5432:5432 postgres:16.2

Мой файл .env содержит:

POSTGRES_DB=mydatabase
POSTGRES_USER=myuser
POSTGRES_PASSWORD=mypassword
HOST=localhost
PORT=5432

Мой файл settings.py содержит:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': config('POSTGRES_DB'),
        'USER': config('POSTGRES_USER'),
        'PASSWORD': config('POSTGRES_PASSWORD'),
        'HOST': config('HOST'),
        'PORT': config('PORT'),
    }
}

Для дополнительной справки я использую Python 3.12 и следующие зависимости:

"asgiref>=3.8.1",
"django>=5.1.6",
"django-taggit>=6.1.0",
"markdown>=3.7",
"psycopg>=3.2.5",
"python-decouple>=3.8",
"sqlparse>=0.5.3"

Как мне использовать контейнер postgres в качестве локальной базы данных разработчиков в моем приложении Django?

ХОСТ в файле .env должен быть именем вашего локального запущенного контейнера docker.

Итак, в вашем случае env-файл должен быть примерно таким:

POSTGRES_DB=mydatabase
POSTGRES_USER=myuser
POSTGRES_PASSWORD=mypassword
HOST=db_container
PORT=5432
<время работы/>

У меня есть аналогичная настройка для локальной разработки, но также используется docker-compose:
.env

[...]
DB_NAME=DB_TEST
DB_USER=username
DB_PASS=pwd
DB_HOST=db
DB_PORT=5432
[...]

docker-compose.yaml

version: "3.9"

services:
  web:
    [...]
  
  db:
    image: postgres
    [...]
    env_file: ./porjectfolder/project_name/settings/.env
 

[...]

settings.py

[...]
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': env('DB_NAME'),
        'USER': env('DB_USER'),
        'PASSWORD': env('DB_PASS'),
        'HOST': env('DB_HOST'),
        'PORT': env('DB_PORT'),NAME": "test_db_learnbattle",
        }
    }
[...]
Вернуться на верх