Как исправить 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,
    }
}

file image Django

В вашем 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 как Compose command:. Я бы удалил строку command:.
  • Вы можете использовать короткую форму Compose build:, поскольку у вас есть имя Dockerfile по умолчанию и нет других опций; build: . только с именем каталога, а не с отображением.
Вернуться на верх