[Dokcer]python3: не удается открыть файл '/app/manage.py': [Errno 2] No such file or directory

Я новичок в docker, и я попытался запустить django на контейнере docker. Однако после выполнения команды "docker-compose up -d" возникла ошибка

python3: can't open file '/app/manage.py': [Errno 2] No such file or directory

показывает в docker. Поскольку кажется, что код может быть успешно запущен в mac os, я сомневаюсь, что это проблема Windows11, в которой я запускаю файл в настоящее время.

Мои вопросы таковы: 1.Почему происходит эта ошибка? 2.Как я могу ее исправить?

Докерфайл:

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /app
WORKDIR /app
COPY requirements.txt /app/
RUN pip install -r requirements.txt
COPY . /app/

файл docker-compose

version: '3'
services:
web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db

Я пытался решить эту проблему в течение нескольких часов, но решения, которые я искал, не сработали. Надеюсь, кто-нибудь сможет помочь. Большое спасибо!!!

Вам следует изменить команду docker-compose file следующим образом, поскольку файл manage.py присутствует в папке проекта.

version: '3'
services:
web:
    build: .
    command: python3 project/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db

Ваш Dockerfile копирует текущее дерево каталогов в каталог образа /app, что вполне нормально. Когда выполняется переопределение Compose command:, вы все еще находитесь в этом каталоге /app, но код вашего приложения находится в подкаталоге project.

Вы должны увидеть, как это запускает временные контейнеры для просмотра собранной файловой системы в образе, например

docker-compose run web ls
docker-compose run web ls ./project

Есть несколько способов решения этой проблемы ( ответ @Divyessh также должен работать), но наиболее простым может быть сделать так, чтобы подкаталог project был текущим каталогом при запуске контейнера. Также немного лучше поместить CMD в Dockerfile, чтобы вы могли самостоятельно docker run образ без его Compose setup.

FROM python:3
ENV PYTHONUNBUFFERED 1
WORKDIR /app              # creates the directory, don't need to RUN mkdir
COPY requirements.txt ./  # shorter and safer to COPY into current directory
RUN pip install -r requirements.txt
COPY ./ ./

# add the following
WORKDIR /app/project      # switch to project subdirectory
EXPOSE 8000               # document container-side port
CMD python3 ./manage.py runserver 0.0.0.0:8000  # standard command to run

В вашем файле docker-compose.yml вам не нужны command: (это то же самое, что и Dockerfile CMD) или блок volumes: (который приведет к тому, что код в образе будет проигнорирован и заменен чем-то другим), и я бы удалил эти строки.

version: '3.8'  # "3" means "3.0"
services:
  web:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db
Вернуться на верх