You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose启动找不到manage.py及VPS部署端口配置问题

问题解答

1. 为何会出现找不到manage.py的错误?

这个错误是由Dockerfile文件复制路径错误和docker-compose挂载/命令配置冲突共同导致的:

(1)Dockerfile的COPY命令逻辑错误

你的后端Dockerfile中执行了COPY . back,这条命令会把宿主机back目录下的所有文件复制到容器的/app/back目录中。也就是说,manage.py实际在容器内的路径是/app/back/manage.py,但你在CMD里写的是python manage.py runserver,Docker会在当前工作目录/app下查找文件,自然找不到。

正确写法应该是把back目录的内容直接复制到容器的/app目录:

# 替换原来的COPY . back
COPY . .

(2)docker-compose的配置冲突

你的docker-compose.yml中给后端服务配置了:

volumes:
  - ./:/back
command: python3 manage.py runserver 0.0.0.0:8000
  • 挂载的./:/back是把宿主机包含back、front的根目录挂载到容器的/back目录,和容器的工作目录/app完全无关,不仅帮不上忙,还可能造成路径混淆。
  • command里依然是在/app目录下找manage.py,路径完全不对。

如果需要本地开发时挂载代码实现热更新,应该把宿主机的back目录挂载到容器的/app:

volumes:
  - ./back:/app

2. 部署到VPS后如何配置80端口访问并绑定域名?

生产环境不能用开发服务器(Django的runserver、Vue的dev命令),需要用静态文件托管+反向代理的方式,把80端口的请求转发到前端和后端,步骤如下:

(1)调整前端Dockerfile(构建生产静态文件)

Vue项目需要先构建成静态文件,用Nginx托管:

# 构建阶段
FROM node:20-alpine3.17 as builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
# 执行生产构建,生成dist目录
RUN npm run build

# 托管阶段
FROM nginx:alpine
# 把构建好的静态文件复制到Nginx默认目录
COPY --from=builder /app/dist /usr/share/nginx/html
# 自定义Nginx配置(处理路由转发和API代理)
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

(2)调整后端Dockerfile(用生产服务器)

替换Django的runserver为Gunicorn(生产级WSGI服务器):

FROM python:3.10
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 安装Gunicorn(也可以直接加到requirements.txt里)
RUN pip install gunicorn
COPY . .
EXPOSE 8000
# 替换为Gunicorn启动命令,注意把your_project_name改成你的Django项目名
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "your_project_name.wsgi:application"]

(3)编写Nginx配置文件(nginx.conf)

在前端目录下创建nginx.conf,配置反向代理,把前端路由和后端API请求分开处理:

server {
    listen 80;
    # 替换成你的域名
    server_name your-domain.com;

    # 处理前端静态文件和SPA路由
    location / {
        root /usr/share/nginx/html;
        try_files $uri $uri/ /index.html;
    }

    # 转发后端API请求(假设后端接口前缀是/api)
    location /api/ {
        proxy_pass http://back:8000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

(4)调整docker-compose.yml

移除开发相关的挂载和命令,让前端容器直接监听80端口:

version: "3.8"

services:
  db:
    image: postgres:15-alpine
    volumes:
      - ./db:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=postgres
    restart: always

  back:
    build: ./back
    env_file: ./back/.env
    depends_on:
      - db
    restart: always
    # 不需要暴露端口给外部,容器内部可直接访问

  front:
    build: ./front
    ports:
      - "80:80"
    depends_on:
      - back
    restart: always

(5)VPS部署步骤

  1. 把代码上传到VPS(用git clone或者scp);
  2. 确保VPS安装了Docker和Docker Compose;
  3. 在域名服务商处把域名解析到VPS的公网IP;
  4. 进入项目根目录,执行docker-compose up -d启动所有服务;
  5. (可选)用Certbot申请免费SSL证书,配置Nginx监听443端口,实现HTTPS访问。

内容的提问来源于stack exchange,提问作者crawlingdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 14:40:29