Давайте попробуем отладить эту ошибку:
maps_web_1 exited with code 2
web_1 | python: can't open file './web/manage.py runserver 0.0.0.0:8000': [Errno 2] No such file or directory
Похоже, либо код не скопирован в контейнер (с именем 'web'), либо команда запущена из корневого / домашнего каталога, где manage.py недоступен.
1. Код доступен на контейнере? Как проверить?
Обычно docker просто выполняет команды в контейнере и завершает работу, если нет незавершенной запущенной задачи (например, сервер работает в фоновом режиме). Чтобы прекратить выход и включить его отладку, добавим команду running , чтобы вы могли войти в container и посмотреть, присутствует ли код.
команда: tail -f / dev / null # трюк для поддержки docker в режиме отладки.
docker -compose.yml
web:
restart: always
build: ./web
expose:
- "8000"
links:
- mysql:mysql
volumes:
- web-django:/usr/src/app
- web-static:/usr/src/app/static
#env_file: web/venv
environment:
DEBUG: 'true'
command: tail -f /dev/null #trick to keep the docker alive for debug mode.
Войдите в контейнер 'web', запустите из командной строки
docker exec -it web bash
Проверьте наличие файлов проекта, теперь вы можете запустить команду python manage.py runserver 8000
вручную. Если это работает, то мы можем быть уверены, что сервер может работать на контейнере. Теперь мы можем проанализировать начальный рабочий каталог.
Если код присутствует, проверьте, почему manage.py не найден? Установлен ли рабочий каталог? означает, что контейнер знает, что является базовым каталогом для запуска команды?
Укажите, какой рабочий каталог находится в Dockerfile перед Вы копируете файлы проекта в контейнер.
Dockerfile в веб-каталоге
ENV PYTHONUNBUFFERED 1
ARG PROJ_DIR=/usr/project/web
RUN mkdir -p $PROJ_DIR
WORKDIR $PROJ_DIR
COPY . $WORKDIR
docker -compose.yml
restart: always
build: ./web
expose:
- "8000"
links:
- mysql:mysql
volumes:
- web-django:/usr/src/app
- web-static:/usr/src/app/static
#env_file: web/venv
environment:
DEBUG: 'true'
command: python manage.py runserver 0.0.0.0:8000 #note this command is triggered from $WORKDIR that we set in Dockerfile.
Я думаю, что это должно решить проблему или помочь вам выяснить проблему.