Почему 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
У меня два вопроса, пожалуйста:
- Почему я получаю ошибку cannot find file?
- Когда я разверну рабочий образ 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