【发布时间】:2021-09-23 08:14:09
【问题描述】:
我正在尝试使用 gunicorn 和 nginx 将 django dockerize 到 docker 映像中。来自this tutorial
运行docker-compose up --detach --build 一切都成功构建。但是gunicorn并没有开始。错误日志说:
bash: /home/soccer/venv/bin/gunicorn: /Users/Umar/PycharmProjects/soccer/venv/bin/python:坏 解释器:没有这样的文件或目录
我该如何解决这个问题?
Dockerfile:
# pull official base image
FROM python:3.7
# accept arguments
ARG PIP_REQUIREMENTS=production.txt
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# install dependencies
RUN pip install --upgrade pip setuptools
# create user for the Django project
RUN useradd -ms /bin/bash soccer
# set current user
USER soccer
# set work directory
WORKDIR /home/soccer
# create and activate virtual environment
RUN python3 -m venv venv
# copy and install pip requirements
COPY --chown=soccer ./requirements /home/soccer/requirements/
RUN pip3 install -r /home/soccer/requirements/${PIP_REQUIREMENTS}
# copy Django project files
COPY --chown=soccer . /home/soccer/
docker-compose.yml:
version: "3.8"
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./config/nginx/conf.d:/etc/nginx/conf.d
- static_volume:/home/soccer/static
- media_volume:/home/soccer/media
depends_on:
- gunicorn
gunicorn:
build:
context: .
args:
PIP_REQUIREMENTS: "${PIP_REQUIREMENTS}"
command: bash -c "/home/soccer/venv/bin/gunicorn --workers 3 --bind 0.0.0.0:8000 soccer.wsgi:application"
depends_on:
- db
volumes:
- static_volume:/home/soccer/static
- media_volume:/home/soccer/media
expose:
- "8000"
environment:
DJANGO_SETTINGS_MODULE: "${DJANGO_SETTINGS_MODULE}"
DJANGO_SECRET_KEY: "${DJANGO_SECRET_KEY}"
DATABASE_NAME: "${DATABASE_NAME}"
DATABASE_USER: "${DATABASE_USER}"
DATABASE_PASSWORD: "${DATABASE_PASSWORD}"
db:
image: postgres:latest
restart: always
environment:
POSTGRES_DB: "${DATABASE_NAME}"
POSTGRES_USER: "${DATABASE_USER}"
POSTGRES_PASSWORD: "${DATABASE_PASSWORD}"
ports:
- 5432
volumes:
- postgres_data:/var/lib/postgresql/data/
volumes:
postgres_data:
static_volume:
media_volume:
【问题讨论】:
-
也许您正在用最后一个复制语句覆盖某些内容。你的 .dockerignore 文件是什么样的?
-
我没有 .dockerignore 文件
-
是的,看来我正在覆盖 venv。现在我将它添加到 .dockerignore。但是现在 docker 容器在 pip list 时什么都不显示
-
已解决,我是安装到全局环境而不是虚拟环境
标签: python django docker nginx gunicorn