You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中Django+Gunicorn报‘Error handling request (no URI read)’问题求助

Django + Gunicorn Docker容器请求处理错误排查与解决

问题现象

在Docker容器内使用Gunicorn运行Django应用时,日志中频繁出现以下错误:

[2024-11-13 18:50:11 +0000] [9] [ERROR] Error handling request (no URI read)
Traceback (most recent call last):
File "/usr/local/lib/python3.13/site-packages/gunicorn/workers/sync.py", line 133, in handle
req = next(parser)
...
SystemExit: 1

尽管请求最终能返回响应,但处理耗时显著增加。

解决方法

1. 切换Gunicorn Worker类型并调整数量

默认的同步worker在高并发或长连接场景下易触发请求解析错误,建议:

  • 安装gevent异步依赖,改用异步worker启动:
    pip install gevent
    gunicorn config.wsgi:application --bind 0.0.0.0:8000 --worker-class gevent --workers 4
    
  • worker数量建议设置为容器CPU核心数的2倍+1,根据实际资源调整

2. 升级Gunicorn并配置超时参数

该错误常与请求头解析异常有关,可通过以下方式修复:

  • 升级Gunicorn至最新稳定版:
    pip install --upgrade gunicorn
    
  • 启动时增加超时与长连接配置,避免连接挂起:
    gunicorn config.wsgi:application --bind 0.0.0.0:8000 --timeout 30 --keep-alive 5
    

3. 排查Docker网络配置

  • 确认docker-compose.yml的端口映射无冲突,避免8000端口被其他容器占用
  • 进入容器内部直接测试服务,排除网络转发问题:
    docker exec -it app curl http://127.0.0.1:8000
    

4. 优化Django应用设置

  • 生产环境务必关闭DEBUG模式,减少调试相关的性能开销
  • 检查并移除不必要的中间件,简化请求处理流程

原配置文件

Dockerfile

FROM python:3.13.0-alpine3.20

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

WORKDIR /app

RUN apk update && \
    apk add --no-cache jq python3-dev build-base gcc jpeg-dev zlib-dev libpq-dev

COPY Pipfile.lock .
RUN jq -r '.default | to_entries[] | .key + .value.version ' Pipfile.lock > requirements.txt && \
    pip install -r requirements.txt

COPY . .

ENTRYPOINT ["sh", "./entrypoint.sh"]

docker-compose.yml

services:
  app:
    build: .
    container_name: app
    volumes:
      - .:/app
      - ./src/media:/app/src/media
    ports:
      - "8000:8000"
    depends_on:
      - db
    env_file:
      - .env
    restart: always

  db:
    image: postgres:17.0-alpine3.20
    container_name: postgres_db
    volumes:
      - postgres_data:/var/lib/postgresql/data
    env_file:
      - .env
    restart: always

volumes:
  postgres_data:

Gunicorn启动命令

gunicorn config.wsgi:application --bind 0.0.0.0:8000

内容的提问来源于stack exchange,提问作者Mikhailo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:44:53