【问题标题】:docker container with django gunicorn nginx带有 django gunicorn nginx 的 docker 容器
【发布时间】: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


【解决方案1】:

我发现了问题。我正在覆盖venv。解决方案是将虚拟环境添加到 .dockerinfo 文件中。

【讨论】:

    猜你喜欢
    • 2019-03-22
    • 2013-03-22
    • 1970-01-01
    • 2021-08-26
    • 2021-12-26
    • 2019-01-04
    • 2021-01-02
    • 2018-10-11
    • 2018-11-13
    相关资源
    最近更新 更多