Docker и Django Rest Framework "неожиданно разорвали соединение"

Обзор

У меня странная ситуация, когда я применяю DEFAULT_FILTER_BACKENDS к настройкам Django Rest Framework (DRF), я получаю сообщение об ошибке "Safari не может открыть 0.0.0.0:8000, потому что сервер неожиданно сбросил соединение".

Следует отметить, что приведенная ниже конфигурация отлично работает со стандартной командой poetry run python manage.py runserver 0.0.0.0:8000, то есть когда я не использую Docker.

Мой файл Django settings.py является стандартным, за исключением:

INSTALLED_APPS = [
    ...
    "rest_framework",
    ...
]
REST_FRAMEWORK = {
    "DEFAULT_FILTER_BACKENDS": (
        "django_filters.rest_framework.DjangoFilterBackend",
    ),
}

и когда я удаляю/комментирую раздел "DEFAULT_FILTER_BACKENDS", сервер работает и мои страницы отлично загружаются.

Dockerfile

# pull official base image
FROM python:3.9.0-buster

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV DJANGO_SETTINGS_MODULE=barrys_project.settings
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN pip install --no-cache-dir --upgrade pip
RUN pip install --no-cache-dir poetry
COPY ./poetry.lock ./pyproject.toml ./
RUN poetry config virtualenvs.create false
RUN poetry install

# copy entrypoint.sh
COPY ./entrypoint.sh ./

# copy project
COPY . .

# run entrypoint.sh
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]

Docker Compose file

version: '3.8'

services:
  web:
    build: ./
    volumes:
      - ./:/usr/src/app/
    command: poetry run python manage.py runserver 0.0.0.0:8000
    ports:
      - 8000:8000
    env_file:
      - ./.env
    depends_on:
      - db

  db:
    image: postgres:13.3-alpine
    volumes:
      - postgres-data:/var/lib/postgresql/data/
    ports:
      - 5432:5432
    environment:
      - POSTGRES_USER=barry
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=barrysdatabase

volumes:
  postgres-data:

Entrypoint.sh

#!/bin/sh

poetry run python manage.py migrate

exec "$@"

Оказалось, что в моих контейнерах Docker были аномалии, которые требовали:

docker-compose build
Вернуться на верх