Почему 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