Как исправить python: не удается открыть файл '//manage.py': [Errno 2] No such file or directory in Django
Как исправить Остаток файла проигнорирован python: can't open file '//manage.py': [Errno 2] No such file or directory when use command docker-compose up
>Вот весь мой код, и я также прикрепил файл изображения.
dockerfile files
FROM python:3.10
ENV PYTHONUNBUFFERED 1
COPY requirements.txt .
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]
docker-compose.yml
version: '3.7'
services:
db:
image: mariadb:10
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
- MYSQL_ROOT_PASSWORD = mariadb
- MYSQL_DATABASE = mariadb
- MYSQL_USER = mariadb
- MYSQL_PASSWORD = mariadb
- MARIADB_ROOT_PASSWORD=mysecretpassword
ports:
- 3306:3306
volumes:
- "mysqldata:/var/lib/mysql"
web:
build:
context: .
dockerfile: Dockerfile
restart: always
command: python manage.py runserver 0.0.0.0:8000
environment:
- DATABASE_URL=mariadb+mariadbconnector://user:mariadb@db:3306/mariadb
ports:
- "8000:8000"
depends_on:
- db
adminer:
image: adminer
restart: always
ports:
- 8080:8080
depends_on:
- db
volumes:
mysqldata:
setting.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mariadb',
'USER': 'mariadb',
'PASSWORD': 'mariadb',
'HOST': '127.0.0.1',
'PORT': 3306,
}
}
В вашем Dockerfile нет COPY
кода вашего приложения, только файл requirements.txt
. Типичная установка копирует все дерево исходных текстов после установки зависимостей пакетов
# existing
COPY requirements.txt .
RUN pip install -r requirements.txt
# add missing
COPY ./ ./
Вы также сможете увидеть это, если docker-compose run web ls
запустите временный контейнер другой командой; вашего исходного кода там просто не будет.
Есть еще несколько мелких ошибок или чисток, которые также могут улучшить эту установку:
- В контейнере
mysql
вокруг знаков равенства в блокеenvironment:
имеются пробелы. Compose не распознает этого, поэтому вы устанавливаете , например,MYSQL_USER
(заканчивающийся пробелом) вmariadb
(начинающийся пробелом). Удалите эти пробелы, так чтоMYSQL_USER=mariadb
. - Конфигурация базы данных неверна, и при запуске вы получите ошибку "connection refused". Контейнер приложения будет думать, что 127.0.0.1 - это контейнер приложения, а не контейнер базы данных или хост. Используйте имя службы Compose контейнера базы данных;
'host': 'db'
. .
- В Dockerfile вы устанавливаете приложение в каталог верхнего уровня файловой системы образа. Это, вероятно, будет работать, но не обязательно является лучшей практикой. Заранее переключитесь на какой-нибудь другой каталог;
WORKDIR /app
. - Вам не нужно повторять Dockerfile
CMD
как Composecommand:
. Я бы удалил строкуcommand:
. - Вы можете использовать короткую форму Compose
build:
, поскольку у вас есть имя Dockerfile по умолчанию и нет других опций;build: .
только с именем каталога, а не с отображением.