[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