Как настроить Dockerize для Django и приложения для голосования в одной настройке docker-compose?
У меня есть проект на Django, который связан с приложением Vite, и я пытаюсь настроить Docker Compose для совместного запуска обоих приложений. Однако я сталкиваюсь с проблемами при создании и запуске контейнеров. Я использую vite для установки tailwind, и все работает нормально без docker, я уже настроил проект django в docker, но мне нужно настроить внешнее приложение vite, которое называется webapp, оно находится в том же каталоге, что и django.
Цель:
- Серверная часть Django → работает на 8000
- Интерфейс Vite → работает на 3000 и подключается к Django
- Обе службы должны запускаться с использованием docker-compose up --build
Однако, когда я пытаюсь запустить docker-compose up --build, я получаю несколько ошибок, или даже docker выполняет сборку без работы vite.
Проблема: При запуске docker-compose up --build я получаю различные ошибки, в том числе:
- не удалось решить: не удалось прочитать файл dockerfile: открыть файл Dockerfile: такого файла или каталога нет
- Vite не запускается должным образом в контейнере, даже если Django работает.
Мой файловый каталог:
For_Testing_Purpose-1/
django_project
┣ __pycache__
┣ asgi.py
┣ settings.py
┣ urls.py
┣ wsgi.py
┗ __init__.py
homepage
┣ migrations
┣ __pycache__
┣ admin.py
┣ apps.py
┣ models.py
┣ tests.py
┣ urls.py
┣ views.py
┗ __init__.py
templates
┗ home.html
webapp
┣ dist
┃ ┣ .vite
┃ ┃ ┗ manifest.json
┃ ┣ assets
┃ ┃ ┗ tailwind-4t-_kGsy.css
┃ ┗ vite.svg
┣ node_modules
┣ public
┃ ┗ vite.svg
┣ src
┃ ┗ style.css
┣ .gitignore
┣ index.html
┣ package-lock.json
┣ package.json
┗ vite.config.ts
.dockerignore
db.sqlite3
docker-compose.yml
Dockerfile
manage.py
requirements.txt
Я подключаюсь к приложению django и vite с помощью django_vite, и нет никаких проблем с тем, что оно отлично работает при запуске vite и приложения django, но в docker у меня проблемы с этим.
Я предоставлю свой Dockerfile и docker-compose.yml, не добавляя к ним никаких node js или vite, потому что все мои попытки закончились неудачей:
Файл Dockerfile:
# Pull base image
FROM python:3.13-slim-bullseye
# Set environment variables
ENV PIP_DISABLE_PIP_VERSION_CHECK 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Set work directory
# WORKDIR /code/website_core
WORKDIR /code
# Install dependencies
COPY ./requirements.txt .
RUN pip install -r requirements.txt
# Copy project
COPY . .
Docker-compose.yml
services:
web:
build: .
command: python /code/manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- 8000:8000
depends_on:
- db
db:
image: postgres:15
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- "POSTGRES_HOST_AUTH_METHOD=trust"
volumes:
postgres_data:
Чтобы запустить vite, я захожу в каталог
cd webapp
затем
npm run dev
Конечно, с моим подходом что-то не так, но я пытаюсь разобраться в этом и изо всех сил стараюсь!!
То, что Я Пробовал С Самого Начала:
Проверенная установка Docker:
Запустил docker, запустив hello-world, чтобы проверить, работает ли Docker. Создал и скомпилировал образы серверной части и интерфейса Docker по отдельности:
Пробовал запускать контейнеры отдельно:
Проверил docker-compose.yml и структуру каталогов:
Запустил docker-compose up -build и получил ошибки: Получено, не удалось решить: не удалось прочитать dockerfile: открыть Dockerfile: такого файла или каталога нет. Также появилось предупреждение о том, что атрибут версии устарел.
Проверено, может ли Docker видеть файлы:
Убедился, что я нахожусь в правильном каталоге, прежде чем запускать docker-compose up --build
Обновлены Docker и Docker Compose:
Вопросы: Как я могу правильно настроить Vote и Django для взаимодействия в Docker?
Это мой репозиторий, если вы хотите взглянуть Репозиторий на Github
Мы были бы очень признательны за любые рекомендации по этому поводу! 🚀
Ваш файл dockerfile
FROM python:3.13-slim-bullseye as backend
ENV PIP_DISABLE_PIP_VERSION_CHECK 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /code
COPY ./requirements.txt .
RUN pip install -r requirements.txt
COPY . .
FROM node:15.12.0-buster AS frontend
WORKDIR /webapp/
RUN --mount=type=cache,target=/root/.npm,rw \
--mount=type=bind,source=webapp/package.json,target=package.json \
--mount=type=bind,source=webapp/package-lock.json,target=package-lock.json \
npm ci
COPY --link webapp/ .
RUN npm run dev
Ваш docker-compose
services:
backend:
build:
context: .
dockerfile: Dockerfile
target: backend
command: python /code/manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
frontend:
build:
context: .
dockerfile: Dockerfile
target: frontend
command: npm run dev
volumes:
- webapp:/webapp
ports:
- "3000:3000"
db:
image: postgres:15
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- "POSTGRES_HOST_AUTH_METHOD=trust"
volumes:
postgres_data: