【发布时间】:2021-10-31 06:49:36
【问题描述】:
概述
我有一个奇怪的情况,当我将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 编写文件
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:
入口点.sh
#!/bin/sh
poetry run python manage.py migrate
exec "$@"
【问题讨论】:
-
查看
web服务的日志。那里可能有一个例外,例如设置错误,服务器无法启动。
标签: python django docker django-rest-framework