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

Nginx后Docker容器运行异常:Django应用报连接重置错误

排查Nginx与Docker容器间的连接重置问题

首先,这个recv() failed (104: Connection reset by peer)错误核心是Nginx和上游Gunicorn容器的连接被意外中断了,结合你的场景(Django+Gunicorn容器、Registry容器,Nginx做反向代理),我整理了几个最常见的排查方向和解决方法:

1. 容器网络配置不匹配

  • 核对Nginx upstream与容器端口的对应关系
    如果你用Docker内部网络(推荐方式),Nginx的upstream必须指向Django容器的内部端口或者容器名(前提是Nginx和Django容器在同一个Docker网络组里),比如:
    upstream django_app {
        server django_container:8000; # 这里的django_container是你的Django容器名
    }
    
    要是用了端口映射把容器端口转到宿主机,得确认宿主机端口没被占用,同时Nginx upstream要写localhost:映射端口或者宿主机IP+端口。
  • 测试容器间的连通性
    进到Nginx容器(或者宿主机),用curl验证Gunicorn服务是否能访问:
    # 内部网络直接用容器名+端口
    curl http://django_container:8000
    # 端口映射就用宿主机IP+映射端口
    curl http://127.0.0.1:8000
    
    如果curl也失败,那问题大概率出在Gunicorn容器本身的服务启动或者网络配置上。

2. Gunicorn监听地址配置错误

很多人在容器里跑Gunicorn时,默认只监听127.0.0.1:8000——这个地址只能容器内部访问,外部(包括Nginx)根本连不上!必须改成监听0.0.0.0:8000,确保容器服务能接受外部连接。
启动Gunicorn的命令应该是这样的:

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

另外记得查看Gunicorn容器的日志,看看有没有启动失败、依赖缺失的报错:

docker logs django_container_name

3. Nginx超时/缓冲配置不足

你的请求是POST类型,这类请求往往数据量更大,要是Nginx的超时设置太短、缓冲不够,就会触发连接中断。可以调整Nginx的相关配置:

server {
    # 其他原有配置...

    proxy_connect_timeout 60s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;

    proxy_buffers 8 16k;
    proxy_buffer_size 32k;
}

改完后重启Nginx:nginx -s reload

4. Docker资源限制导致服务崩溃

如果给Django容器分配的CPU、内存太少,Gunicorn在处理请求时可能直接崩溃,进而导致连接重置。可以检查容器的资源配置:

docker inspect django_container_name | grep -A 10 "Resources"

要是发现内存/CPU限制过低,适当调高后重启容器试试。

5. 防火墙/安全组阻断连接

哪怕是Docker环境,宿主机的防火墙(比如iptables、ufw)或者云安全组也可能阻断Nginx和容器之间的连接。检查宿主机的防火墙规则,确保相关端口(比如8000)允许内部访问。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:00:51