Контейнер Docker не находит файл manage.py при использовании DRF

Я пытался контейнеризировать свой проект, который использует postgresql. Но по какой-то причине он не может полностью выполнить команды, когда я проверяю веб-контейнер, следя за ним на docker-desktop, я вижу, что он выполняет команды migrations, но в какой-то момент он останавливается и выдает мне следующую ошибку:

2023-01-17 19:51:29   Apply all migrations: admin, auth, company, contenttypes, oauth2_provider, product, sessions, social_django, users, warehouse
2023-01-17 19:51:29 Running migrations:
2023-01-17 19:51:29   No migrations to apply.
2023-01-17 19:51:29 sh: manage.py: not found

По какой-то причине он не видит файл manage.py.

Когда я запускаю docker-compose run web sh и проверяю, существует ли manage.py в каталоге, используя ls в CLI, я обнаруживаю, что он там есть.

Что я могу делать неправильно?

Dockerfile:

# pull official base image
FROM python:3.9-alpine

# set work directory
WORKDIR /app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install psycopg2 dependencies
RUN apk update \
    && apk add postgresql-dev gcc python3-dev musl-dev

# install python dependencies
RUN apk add -u zlib-dev jpeg-dev libffi-dev gcc musl-dev
RUN python3 -m pip install --upgrade pip
COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r requirements.txt


# copy project
COPY . .

docker-compose.yml:

version: '3.9'
services:
  nginx:
    container_name: core_web
    restart: on-failure
    image: nginx:stable
    volumes:
      - ./nginx/nginx.dev.conf:/etc/nginx/conf.d/default.conf
      - static_volume:/app/static
    ports:
      - "80:80"
    depends_on:
      - web
  web:
    container_name: web
    build: .
    env_file: .env
    ports:
      - "5000:5000"
    command: >
      sh -c " python manage.py makemigrations && python manage.py migrate &&
           manage.py runserver 0.0.0.0:5000"
    volumes:
      - .:/app
      - static_volume:/app/static
    depends_on:
      - db
  db:
    container_name: core_db
    image: postgres:15
    env_file: .env
    environment:
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASS}
      - POSTGRES_DB=${DB_NAME}
    volumes:
      - postgres_data:/var/lib/postgresql/data/

volumes:
  static_volume:
  postgres_data:

Я изменил web своего docker-compose.yml файла:

  web:
    tty: true
    container_name: web
    build: .
    restart: always
    env_file: .env
    ports:
      - "5000:5000"
    command: >
      sh -c " python3 /app/manage.py makemigrations && python3 /app/manage.py migrate && python3 /app/manage.py runserver 0.0.0.0:5000"
    volumes:
      - .:/app
      - static_volume:/app/static
    depends_on:
      - db

В основном, я добавил tty: true и изменил команду на:

sh -c " python3 /app/manage.py makemigrations && python3 /app/manage.py migrate && python3 /app/manage.py runserver 0.0.0.0:5000"

То, что, как я полагаю, происходило: Я не указал папку расположения manage.py, которая, как я полагаю, была установлена в томах /app. Таким образом, я должен был указать в команде его местоположение, не стесняйтесь поправить меня в этом.

Это сделало его функциональным и позволило мне получить доступ к бэкенду и его базе данных postgres.

Вернуться на верх