#python #django #docker #nginx #gunicorn
Вопрос:
Я пытаюсь докеризировать django, используя gunicorn и nginx, в образ докера. из этого урока
Запуск docker-compose up --detach --build
всех сборок проходит успешно. Но гуникорн еще не начинается. В журнале ошибок говорится:
bash: /главная/футбол/venv/bin/gunicorn: /Пользователи/Умар/Pycharmпроекты/футбол/venv/bin/python: плохой интерпретатор: Нет такого файла или каталога
Как я могу это исправить?
Докерфайл:
# 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/
докер-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:
Комментарии:
1. Может быть, вы что-то переписываете в последнем заявлении о копировании. Как выглядит ваш файл .dockerignore?
2. У меня нет файла .dockerignore
3. Да, кажется, я переписывал venv. Теперь я добавил его в .dockerignore. Но теперь контейнер docker ничего не показывает, когда список точек
4. Решено, я устанавливал в глобальную env вместо виртуальной env
Ответ №1:
Я нашел проблему. Я переписывал венв. Решение состоит в том, чтобы добавить виртуальный env в файл .dockerinfo.