docker里面用gunicorn 启动Django服务 代码加载两次
/usr/local/bin/gunicorn QaPlatform.wsgi:application -c gunicorn.conf.py
workers=1 # 并行工作进程数 threads=10 # 指定每个工作者的线程数 bind=[‘0.0.0.0:8001’] # 监听内网端口8000 proc_name=’qaServer’ # 进程名称 pidfile=’/tmp/qaServer.pid’ # 设置进程文件目录 worker_class=’gthread’ # 工作模式协程 timeout=30 # 超时 max_requests=6000 # 最大请求数
`
在 Docker 中使用 Gunicorn 启动 Django 服务时,出现了代码加载两次的问题。这通常与 Gunicorn 的配置和 Docker 的行为有关。
Gunicorn 的配置可能导致它启动多个进程或线程,从而导致代码被加载多次。
Docker 容器行为:
首先,确保 Gunicorn 的配置正确,特别是 workers 和 threads 的设置:
workers
threads
在你的配置中:
workers = 1 # 并行工作进程数 threads = 10 # 指定每个工作者的线程数 bind = ['0.0.0.0:8001'] # 监听内网端口8000 proc_name = 'qaServer' # 进程名称 pidfile = '/tmp/qaServer.pid' # 设置进程文件目录 worker_class = 'gthread' # 工作模式协程 timeout = 30 # 超时 max_requests = 6000 # 最大请求数
确保 workers 设置为 1,以避免启动多个进程。
在 Docker 中,如果容器被配置为自动重启,它可能会启动多个 Gunicorn 进程。检查你的 Docker 配置,确保没有配置自动重启策略。
如果你在启动 Django 时有定时任务,可以使用单实例启动方法。例如,使用 runserver 时可以添加 --noreload 选项以避免代码被加载多次:
runserver
--noreload
python manage.py runserver --noreload
在 Docker 中启动 Gunicorn 时,可以确保只启动一个进程。例如,创建一个 Dockerfile 来配置你的服务:
Dockerfile
FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 复制项目文件 COPY . /app # 安装依赖 RUN pip install -r requirements.txt # 启动 Gunicorn CMD ["gunicorn", "QaPlatform.wsgi:application", "-c", "gunicorn.conf.py"]
然后使用以下命令构建和运行 Docker 容器:
docker build -t my-django-app . docker run -p 8001:8001 my-django-app
通过正确配置 Gunicorn 和 Docker,你可以避免 Django 服务启动多次的问题。如果问题仍然存在,请检查是否有其他进程或服务在启动多个实例,或考虑在代码中添加日志记录以调试问题。