При создании проекта django через контейнер docker пишет sh: django-admin: not found
Я создал образ docker python поверх alpine проблема в том, что когда я хочу запустить приложение django, оно не может найти django. и это правильно, потому что когда я набираю pip list, в нем нет django и других пакетов.
ps: при создании образов он показывает, что собирает django и другие пакеты
это файл requirements.txt
Django>=3.2.4,<3.3
djangorestframework>=3.12.4,<3.13
вот мой Dockerfile:
FROM python:3.9-alpine3.13
LABEL maintainer="siavash"
ENV PYTHONUNBUFFERED 1
COPY ./requirements.txt /tmp/requirements.txt
COPY ./requirements.dev.txt /tmp/requirements.dev.txt
COPY ./app /app
WORKDIR /app
EXPOSE 8000
ARG DEV=false
RUN python -m venv /py && \
/py/bin/pip install --upgrade pip && \
/py/bin/pip install -r /tmp/requirements.txt && \
if [ $DEV = "true" ]; \
then /py/bin/pip install -r /tmp/requirements.dev.txt ; \
fi && \
rm -rf /tmp && \
adduser \
--disabled-password \
--no-create-home \
django-user
ENV PATH = "/py/bin:$PATH"
USER django-user
и это docker-compose.yml
version: "3.9"
services:
app:
build:
context: .
args:
- DEV=true
ports:
- "8000:8000"
volumes:
- ./app:/app
command: >
sh -c "python manage.py runserver 0.0.0.0:8000"
и вот команда, которую я использую:
docker-compose run --rm app sh -c "django-admin startproject app . "
BTW образ создан успешно
Попробуйте pip3 install
вместо pip install
Если это не работает, попробуйте установить его отдельно в шаге и проверить.
- В обычных случаях не следует использовать virtualenv внутри Docker Container. см. https://stackoverflow.com/a/48562835/19886776 .
- Внутри контейнера нет необходимости создавать дополнительного пользователя "django-user", так как контейнер является изолированной средой.
Ниже приведен код, который создает новый проект Django через контейнер Docker
requirements.txt
Django>=3.2.4,<3.3
Dockerfile
FROM python:3.9-alpine3.13
ENV PYTHONUNBUFFERED 1
COPY ./requirements.txt /tmp/requirements.txt
RUN pip install -r /tmp/requirements.txt && \
rm /tmp/requirements.txt
WORKDIR /app
docker-compose.yml
version: "3.9"
services:
app:
build:
context: .
ports:
- "8000:8000"
volumes:
- ./app:/app
command: >
sh -c "python manage.py runserver 0.0.0.0:8000"
Команды для создания нового проекта
docker-compose build
docker-compose run --rm app sh -c "django-admin startproject app ."
docker-compose up -d
Для редактирования файлов, созданных контейнером docker, нам нужно зафиксировать право собственности на новые файлы.
sudo chown -R $USER:$USER app
Причина, по которой это происходит, как я полагаю, заключается в очень простой ошибке, которую трудно заметить 😭.
ENV PATH = "/py/bin:$PATH"
должно быть
ENV PATH="/py/bin:$PATH"
и вы можете столкнуться с проблемой пользователя django-user
USER django-user
так что вы можете использовать этот, который я вставил.
Все остальное выглядит правильно.