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

使用docker-compose+Nginx部署React.js与Nest.js时仅显示Nginx欢迎页求助

问题根因

你当前配置的核心错误有两个:

  • 外层负责监听3000端口的Nginx容器仅挂载了自定义配置文件,未持有前端构建后的静态资源,其/usr/share/nginx/html目录下只有Nginx官方默认的欢迎页文件,因此访问根路径时显示默认页。前端构建产物全部存放在frontend容器内部的文件系统中,和外层Nginx容器完全不互通。
  • frontend容器的Dockerfile内置了冗余的Nginx服务,没有实际作用,白白占用资源。

修复步骤

1. 修改前端Dockerfile

移除冗余的Nginx层,仅保留构建逻辑,将产物存放在镜像内指定目录即可:

FROM node:14.18.1-alpine3.14 as build

WORKDIR /app/frontend
COPY package.json /app/frontend/
COPY yarn.lock /app/frontend/

RUN yarn install --frozen-lockfile

COPY . /app/frontend

RUN yarn run build

2. 修改docker-compose.yaml配置

新增共享卷存放前端构建产物,分别挂载到frontend服务的构建输出目录和Nginx服务的静态资源目录:

version: "3.6"

services:
  database:
    # 原有配置保持不变
    image: postgres:13.1-alpine
    env_file:
      - ./database/.env
    volumes:
      - "db-data:/var/lib/postgresql/data"
    networks:
      - challenge
    ports:
      - "5432:5432"

  backend:
    # 原有配置保持不变
    build:
      context: $PWD/../../backend
      dockerfile: $PWD/backend/Dockerfile
    volumes:
      - ./backend/.env:/app/.env
      - ../../backend/src:/app/src
      - storage:/app/storage
    ports:
      - 3000
    networks:
      - challenge
    depends_on:
      - database
    env_file:
      - ./backend/.env
    environment:
      - FORCE_COLOR=1

  frontend:
    build:
      context: $PWD/../../web
      dockerfile: $PWD/frontend/Dockerfile
    # 移除无用的端口暴露
    networks:
      - challenge
    depends_on:
      - backend
    env_file:
      - ./frontend/.env
    volumes:
      - ../../web/src:/app/frontend/src
      # 新增共享卷挂载构建产物目录
      - frontend-build:/app/frontend/build

  nginx:
    image: nginx
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      # 新增挂载前端构建产物到Nginx静态资源目录
      - frontend-build:/usr/share/nginx/html
    ports:
      - 3000:80
    depends_on:
      - backend
      - frontend
    networks:
      - challenge

volumes:
  db-data:
  storage:
  # 新增前端构建产物共享卷
  frontend-build:

networks:
  challenge:

3. 重启服务清除缓存

执行以下命令清除旧容器、旧卷后重新构建启动:

docker-compose down -v
docker-compose up --build

排查补充

如果修改后仍有问题,可进入Nginx容器查看配置是否正常加载:

# 查看Nginx加载的完整配置
docker exec <你的Nginx容器名> nginx -T

确认配置中location /的root路径是否正确指向静态资源目录。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:24:04