Я использую 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 должен работать. Если вам нужно использовать тесты, попробуйте старый конфиг.

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