我有一个用于后端的 Django 应用程序和一个用于前端的 Vue 应用程序。该应用程序在我的本地计算机上 100% 运行。我正在尝试对应用程序进行 docker 化,以便我可以将其部署在 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
所以我有两个问题:
感谢您的帮助。
将 compose 文件中的后端服务命令更新为:
command: python3 back/manage.py runserver 0.0.0.0:8000
再次运行
docker compose up --build
。
原因如下。
后端 Dockerfile 中的COPY . back
:这会将当前目录的内容复制到 Docker 容器中 back
目录(根据 /app
)内名为 WORKDIR
的目录中。所以,目录将是 /app/back
。
command: python3 manage.py runserver 0.0.0.0:8000
在撰写文件
此命令假定
manage.py
文件位于容器内应用程序的根目录中。但是,根据您的配置,该目录应该是 app/back
。
将命令更新为此应该有效:
command: python3 back/manage.py runserver 0.0.0.0:8000