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

Docker部署React+Spring微服务:localhost无响应问题求助

问题排查与修复方案

场景1:使用Node镜像运行React前端(ERR_EMPTY_RESPONSE)

核心问题是容器内部端口与映射端口不匹配:你的Dockerfile声明EXPOSE 80,但npm start默认启动React开发服务器在3000端口,外部映射的3000:80自然无法获取响应。同时生产环境不推荐用开发服务器,建议改用静态文件服务工具。

修改React的Dockerfile:

FROM node:16-alpine  
WORKDIR /app  
COPY package*.json ./  
RUN npm install  
COPY . .  
RUN npm run build  
# 安装轻量静态文件服务工具
RUN npm install -g serve
EXPOSE 3000
# 运行build后的静态文件,指定端口为3000
CMD ["serve", "-s", "build", "-l", "3000"]

同步修改docker-compose的前端端口映射,保持内外一致:

frontend:  
  image: frontend-service  
  ports:  
    - "3000:3000"

场景2:使用Nginx镜像运行React前端(无法加载项目index.html)

问题在于未将React编译后的静态文件复制到Nginx的默认静态目录,导致Nginx只能加载自带的默认页面。

修改前端的Dockerfile(采用分阶段构建,减少镜像体积):

# 第一阶段:编译React项目
FROM node:16-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# 第二阶段:用Nginx部署静态文件
FROM nginx:alpine  
# 复制编译好的静态文件到Nginx目录
COPY --from=builder /app/build /usr/share/nginx/html
# 复制自定义Nginx配置
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

同时补充Nginx配置的必要基础项,避免静态文件解析异常:

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;

  server {  
    listen 80;
    location / {
      root /usr/share/nginx/html;
      index index.html;
      try_files $uri /index.html;
    }  
    location /spring-demo1/ {
      proxy_pass http://spring-demo1:8081/;
      # 添加代理头,避免后端服务识别请求异常
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }   
    location /spring-demo2/ {
      proxy_pass http://spring-demo2:8080/;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
  }
}

额外注意事项

  • Docker Compose中服务名称(spring-demo1、spring-demo2)需与Nginx配置里的proxy_pass地址完全一致,Docker内部DNS会自动解析这些服务名。
  • 建议在docker-compose中直接指定前端构建上下文,无需手动提前构建镜像:
    frontend:
      build: ./front-end  # 指向前端项目目录
      ports:
        - "3000:80"
    
  • 确认React项目中API请求路径与Nginx反向代理路径匹配(比如请求/spring-demo1/api/users,而非直接请求localhost:8081)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 09:43:15