Почему docker не может найти мой файл, когда я запускаю docker compose up

У меня есть приложение Django для бэкенда и приложение Vue для фронтенда. Приложение работает на 100% на моей локальной машине. Я пытаюсь докеризировать приложение, чтобы развернуть его на VPS, чтобы кто-то мог посмотреть на него.

Передняя часть запускается, когда я запускаю docker compose up, но задняя часть каждый раз выдает одну и ту же ошибку:

python3: can't open file '/app/manage.py': [Errno 2] No such file or directory

Моя структура каталогов выглядит следующим образом:

back (directory)
... (django apps directories)
-- manage.py
-- Dockerfile
-- requirements.txt

front (directory)
... (vue directories)
-- Dockerfile
-- package.json
-- vite.config.js
-- index.html

Вот мой Dockerfile для бэкенда:

FROM python:3.10

WORKDIR /app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY . back

EXPOSE 8000

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

Вот мой Dockerfile для фронт-энда:

FROM node:20-alpine3.17

WORKDIR /app

COPY package.json /app/
RUN npm install 

COPY . front/

EXPOSE 8080

CMD ["npm", "run", "dev:docker"]

и вот мой файл docker-compose.yml:

version: "1.1"

services:
  db:
    image: postgres:15-alpine
    volumes:
      - ./db:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=postgres
  back:
    build: ./back
    ports:
      - "8000:8000"
    volumes:
      - ./:/back
    env_file: ./back/.env
    command: python3 manage.py runserver 0.0.0.0:8000
    depends_on:
      - db
    restart: on-failure
  front:
    build: ./front
    ports:
      - "8080:8080"
    volumes:
      - ../front/src:/front/src
    environment:
      - CHOKIDAR_USEPOLLING=true
    command: npm run dev
    depends_on:
      - back

У меня два вопроса, пожалуйста:

  1. Почему я получаю ошибку cannot find file?
  2. Когда я разверну рабочий образ Docker на VPS, как сделать его доступным на порту 80, чтобы при наведении домена на VPS я видел полный сайт?

Спасибо за любую помощь.

Обновите команду для службы backend в файле compose следующим образом:

command: python3 back/manage.py runserver 0.0.0.0:8000

Запустите docker compose up --build снова.

Вот причина.

COPY . back в Dockerfile для бэкенда: Это скопирует содержимое текущего каталога в каталог с именем back внутри каталога /app (в соответствии с WORKDIR) в контейнере Docker. Таким образом, каталог будет /app/back.

command: python3 manage.py runserver 0.0.0.0:8000 в файле compose: Эта команда предполагает, что файл manage.py находится в корневом каталоге вашего приложения внутри контейнера. Но, исходя из вашей конфигурации, каталог должен быть app/back.

Обновление команды на эту должно сработать:

command: python3 back/manage.py runserver 0.0.0.0:8000

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