При создании проекта 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

Если это не работает, попробуйте установить его отдельно в шаге и проверить.

  1. В обычных случаях не следует использовать virtualenv внутри Docker Container. см. https://stackoverflow.com/a/48562835/19886776
  2. .
  3. Внутри контейнера нет необходимости создавать дополнительного пользователя "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 так что вы можете использовать этот, который я вставил.

Все остальное выглядит правильно.

Вернуться на верх