Невозможно импортировать Django в контейнер docker, установленный с miniconda
Я следовал по сути той же настройке, которая безупречно работает в другом проекте, но здесь она работает не так, как ожидалось.
У меня есть этот файл docker:
FROM continuumio/miniconda3
ENV PYTHONUNBUFFERED=1
RUN mkdir /static
RUN apt update && apt install -y build-essential time libgraphviz-dev graphviz
RUN conda create -n env -c conda-forge python==3.10 django==4 pip
SHELL ["conda", "run", "-n", "env", "/bin/bash", "-c"]
COPY backend/requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY ./backend /backend
WORKDIR /backend/
И этот файл docker-compose:
version: "3.3"
services:
backend:
container_name: backend
restart: always
user: ${UID}
build:
context: .
dockerfile: dockerfiles/Dockerfile-backend
env_file:
- ./.env
command: ./manage.py runserver --database docker
volumes:
- ./backend/:/backend/
- ${STATIC}:/static/
ports:
- "8000:8000"
depends_on:
- db
db:
container_name: db
restart: always
image: postgres:13.4
volumes:
- ${DB}:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
Итак, все выглядит довольно просто. Я вижу, что django установлен, а также pip используется для установки других требований, однако, когда я запускаю контейнер с помощью docker-compose, он возвращает, что django не может быть импортирован. Я пытался добавить команду SHELL для указания окружения conda (я пробовал базовое окружение, а также env), но это не работает. Может ли кто-нибудь заметить здесь ошибку и указать, как ее исправить?
Вот сообщение об ошибке:
ImportError: Не удалось импортировать Django. Вы уверены, что он установлен и доступен в вашей переменной окружения PYTHONPATH? Забыли ли вы активировать виртуальное окружение?
Я также пытался запустить его без оператора USER, но ошибка та же. И я изменил команду в файле docker на conda run -n base -c ..., тоже безрезультатно. Раньше мне это также не требовалось. Это весьма озадачивает, потому что контейнер continuumio создан для этой цели.
Следующая конфигурация заставила его работать.
Dockerfile:
FROM continuumio/miniconda3
ENV PYTHONUNBUFFERED=1
RUN mkdir /static
SHELL ["/bin/bash", "-c"]
RUN apt update && apt install -y build-essential time libgraphviz-dev graphviz
RUN conda create -n env -c conda-forge python==3.10 django==4 pip && conda init bash $$ source ~/.bashrc
COPY backend/requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY ./backend /backend
WORKDIR /backend/
docker-compose file:
version: "3.3"
services:
backend:
container_name: backend
restart: always
user: ${UID}
build:
context: .
dockerfile: dockerfiles/Dockerfile-backend
env_file:
- ./.env
command: ./manage.py runserver
volumes:
- ./backend/:/backend/
- ${STATIC}:/static/
ports:
- "8000:8000"
depends_on:
- db
db:
container_name: db
restart: always
image: postgres:13.4
volumes:
- ${DB}:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres