Я использую Django с PostgreSQL на docker compose, но django-test не может получить доступ к базе данных
Я практикуюсь Writing your first Django app, part 5, это раздел django test. И мое окружение таково:
- Django 4.0
- Python 3.9
- База данных PostgreSQL 14.2
- Docker compose
Кроме того, соединение с PostgreSQL настраивается через .pg_service.conf и .pgpass.
docker-compose.yml
version: "3.9"
services:
web:
build:
context: .
container_name: web
restart: unless-stopped
tty: true
working_dir: /opt/apps
volumes:
- .:/opt/apps/
- .pgpass:/root/.pgpass
- .pg_service.conf:/root/.pg_service.conf
entrypoint: "./entrypoint.sh"
command: python manage.py runserver 0.0.0.0:8000
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres
container_name: db
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
ports:
- ${DB_PORT}:5432
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
networks:
django-tutorial:
составьте файл .env
DB_USER=postgres
DB_PASSWORD=postgres
DB_HOST=db
DB_PORT=5432
.pg_service.conf
[DB]
host=db
user=postgres
dbname=django_tutorial
port=5432
.pgpass
db:5432:postgres:postgres:postgres
Когда docker-compose up -d выполняется с вышеуказанной конфигурацией и выполняется python manage.py migrate, миграция выполняется без проблем и база данных доступна.
Однако, когда я пытаюсь запустить тест, как в python manage.py test polls, я получаю следующую ошибку.
(Тест такой же, как и код в ссылке в начале этой статьи).
Нужна ли мне какая-либо дополнительная конфигурация для тестовой БД?
Использование имени службы для целей тестирования в настоящее время не поддерживается.
Я подозреваю, что именно поэтому python manage.py test не работает.
Смотрите билет здесь https://code.djangoproject.com/ticket/33685
Если причина вашей проблемы в этом, python manage.py runserver должен работать.
Если вам нужно использовать тесты, попробуйте старый конфиг.