Docker部署Vue React项目

刚写完前端项目,却不知道怎么部署到服务器?
用Docker可以一键打包你的Vue或React应用,环境隔离、迁移方便。
本文按步骤教你完成,不需要懂Docker原理也能上手。

准备条件

  • 一台安装了Docker的服务器(推荐CentOS 7+或Ubuntu 20.04+),执行docker --version确认版本。
  • 一个能正常构建的Vue或React项目(例如用Vue CLI或Create React App创建)。
  • 本地已安装Node.js(用于构建项目),但服务器上不需要Node。

编写Dockerfile:多阶段构建,镜像更小

在项目根目录创建名为Dockerfile的文件(无后缀)。
下面是一个通用模板,同时适配Vue和React(构建命令不同时只需改构建步骤):

# 第一阶段:构建项目
FROM node:18-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
# 如果是Vue项目,执行 npm run build
# 如果是React项目,执行 npm run build
RUN npm run build

# 第二阶段:运行环境
FROM nginx:stable-alpine
COPY --from=build /app/dist /usr/share/nginx/html
# 复制自定义nginx.conf(可选,用于处理路由历史模式)
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

注意: Vue和React的构建输出目录默认都是dist/
如果你用Vite,输出目录可能是dist/build/,请根据实际修改COPY --from=build的路径。

如果使用Vue Router的history模式或React Router,需要配置Nginx处理前端路由。
在项目根目录创建nginx.conf

server {
    listen 80;
    server_name _;
    location / {
        root /usr/share/nginx/html;
        try_files $uri $uri/ /index.html;
    }
}

然后Dockerfile中需要把nginx.conf复制进去(上面已包含)。

构建镜像并运行容器

打开终端,进入项目目录(Dockerfile所在位置),依次执行:

# 构建镜像,标签设为my-frontend:latest
docker build -t my-frontend:latest .

# 运行容器,映射本机8080端口到容器80端口
docker run -d -p 8080:80 --name my-app my-frontend:latest

-d后台运行,--name给容器取个名字方便管理。
现在访问http://服务器IP:8080就能看到你的前端页面。

常见问题与避坑

1. 容器启动后页面白屏或404
原因通常是构建输出路径不对或Nginx未正确配置。检查COPY路径:进入容器docker exec -it my-app sh,查看/usr/share/nginx/html下是否有index.html。若没有,修改Dockerfile中的构建输出目录。

2. 端口冲突
如果8080被占用,换一个端口再docker run,例如-p 3000:80

3. 环境变量问题
前端项目通常通过VUE_APP_*REACT_APP_*传递环境变量。在Docker多阶段构建中,这些变量需要在构建阶段传入。例如:

docker build --build-arg VUE_APP_API_URL=https://api.example.com -t my-frontend .

并在Dockerfile中添加ARG

ARG VUE_APP_API_URL
ENV VUE_APP_API_URL=$VUE_APP_API_URL

注意:React的环境变量必须在构建时硬编码进代码,所以必须通过--build-arg传入。

4. 镜像体积过大
尽量使用alpine版本镜像,并清理不必要的文件。多阶段构建已经大幅减小体积,但还可以在构建阶段加上RUN npm prune --production删除dev依赖。

效果验证

访问http://服务器IP:映射端口,页面正常显示且路由跳转无404即成功。
可以在浏览器打开开发者工具查看网络请求,确认静态资源加载正常。
如果要更新代码,只需重新构建镜像并启动新容器:

docker stop my-app
docker rm my-app
docker build -t my-frontend:latest .
docker run -d -p 8080:80 --name my-app my-frontend:latest

最后提醒

  • 服务器防火墙要放行对应端口(如8080),例如CentOS执行firewall-cmd --add-port=8080/tcp --permanent && firewall-cmd --reload
  • 如果使用宝塔面板,可以在“安全”中添加端口规则,或在“Docker”管理器里直接管理容器。
  • 对于生产环境,建议使用docker-compose编排后端API和数据库,并配置反向代理。

现在动手试试吧!
如果你在部署中遇到其他报错,欢迎在评论区留言一起排查。

分享到:
上一篇
Linux系统备份与恢复实操:从命令到避坑全程指南
下一篇
服务器容器化部署优势:为什么升级后运维效率翻倍?
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意