Docker 本地部署 CSR 前端项目完整指南
文章目录一、前言二、为什么使用 Docker 部署前端项目三、准备工作3.1 安装 Docker Desktop3.2 配置 Docker 镜像加速器可选但推荐四、项目结构和配置文件详解4.1 Dockerfile4.2 nginx.conf4.3 docker-compose.yml4.4 .dockerignore五、部署步骤方法一使用 Docker Compose推荐1. 进入项目目录2. 构建并启动容器3. 验证部署4. 访问应用5. 停止容器方法二使用 Docker 命令1. 构建镜像2. 运行容器3. 管理容器六、常见问题与解决方案问题 1无法连接到 Docker Hub问题 2ESLint 配置文件找不到问题 3端口被占用问题 4容器启动后无法访问问题 5修改代码后不生效七、容器管理最佳实践日常开发流程容器生命周期管理资源清理生产环境优化八、监控和日志本文将详细介绍如何使用 Docker 在本地部署一个基于 Vue3 Vite 的客户端渲染CSR前端项目包括完整的配置文件、部署流程和常见问题解决方案。一、前言在现代前端开发中Docker已经成为项目部署的标准工具之一。通过Docker我们可以将前端应用及其运行环境打包成一个独立的容器实现一次构建到处运行的目标。本文将以一个 Vue3 项目为例详细介绍如何使用Docker进行本地部署。本项目使用的技术栈前端框架Vue 3.4.21构建工具Vite 5.2.0UI 框架Element Plus 2.5.3包管理器pnpm 10.7.0容器化Docker Docker ComposeWeb 服务器Nginx (Alpine)二、为什么使用 Docker 部署前端项目优势环境一致性开发、测试、生产环境完全一致避免在我机器上能跑的问题快速部署一条命令即可完成部署无需手动配置 Nginx易于维护配置文件化版本可控资源隔离容器之间相互独立互不影响易于扩展可以轻松实现负载均衡和水平扩展适用场景本地开发环境搭建团队协作开发CI/CD 流程生产环境部署微服务架构三、准备工作3.1 安装 Docker DesktopWindows 用户访问 Docker Desktop 官网下载并安装 Docker Desktop for Windows启动 Docker Desktop验证安装docker--version docker-compose--version3.2 配置 Docker 镜像加速器可选但推荐在中国大陆访问Docker Hub可能较慢建议配置国内镜像源。打开Docker Desktop → Settings → Docker Engine添加以下配置{builder:{gc:{defaultKeepStorage:20GB,enabled:true}},experimental:false,registry-mirrors:[https://docker.m.daocloud.io,https://docker.1panel.live,https://hub.rat.dev]}如图所示点击Apply Restart重启 Docker。四、项目结构和配置文件详解前端项目结构主要添加Dockerfile、docker-compose.yml、nginx.conf、.dockerignore文件vue3/ ├── src/ # 源代码目录 ├── public/ # 静态资源 ├── dist/ # 构建输出目录自动生成 ├── node_modules/ # 依赖包 ├── package.json # 项目配置 ├── vite.config.ts # Vite 配置 ├── Dockerfile # Docker 镜像构建文件 ├── docker-compose.yml # Docker Compose 配置 ├── nginx.conf # Nginx 服务器配置 └── .dockerignore # Docker 忽略文件配置文件详解4.1 DockerfileDockerfile 采用多阶段构建策略分为构建阶段和运行阶段可以显著减小最终镜像体积。# 多阶段构建 # 第一阶段构建应用 FROM node:18-alpine AS builder # 设置工作目录 WORKDIR /app # 复制 package.json 和 lock 文件 COPY package*.json pnpm-lock.yaml ./ # 安装 pnpm RUN npm install -g pnpm10.7.0 # 安装依赖 RUN pnpm install --frozen-lockfile # 复制项目文件 COPY . . # 构建项目 RUN pnpm run build # 第二阶段运行应用 FROM nginx:alpine # 复制自定义 nginx 配置 COPY nginx.conf /etc/nginx/conf.d/default.conf # 从构建阶段复制构建产物到 nginx 目录 COPY --frombuilder /app/dist /usr/share/nginx/html/vue3 # 暴露端口 EXPOSE 80 # 启动 nginx CMD [nginx, -g, daemon off;]关键点解析多阶段构建第一阶段使用node:18-alpine构建应用第二阶段使用nginx:alpine运行应用最终镜像只包含 Nginx 和静态文件体积约 50-100MB依赖安装优化先复制package.json利用 Docker 缓存机制使用--frozen-lockfile确保依赖版本一致轻量级基础镜像使用 Alpine Linux镜像体积更小4.2 nginx.confNginx 配置文件负责处理 HTTP 请求和静态文件服务。server { listen 80; server_name localhost; # 设置根目录 root /usr/share/nginx/html; # 开启 gzip 压缩 gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xmlrss application/javascript application/json; # 处理 /vue3/ 路径 location /vue3/ { alias /usr/share/nginx/html/vue3/; try_files $uri $uri/ /vue3/index.html; # 设置缓存策略 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { expires 1y; add_header Cache-Control public, immutable; } } # 处理根路径重定向到 /vue3/ location / { return 301 /vue3/; } # 错误页面 error_page 404 /vue3/index.html; # 健康检查端点 location /health { access_log off; return 200 healthy\n; add_header Content-Type text/plain; } }配置亮点支持 Vue Router History 模式try_files $uri $uri/ /vue3/index.html确保所有路由都指向 index.htmlGzip 压缩减少传输数据量提升加载速度静态资源缓存对 JS、CSS、图片等资源设置 1 年缓存使用immutable标记浏览器永不重新验证健康检查端点/health端点用于监控服务状态4.3 docker-compose.ymlDocker Compose 简化了容器的管理和编排。version:3.8services:vue3-app:# 构建配置build:context:.dockerfile:Dockerfile# 容器名称container_name:vue3-app# 端口映射 (主机端口:容器端口)ports:-8080:80# 重启策略restart:unless-stopped# 环境变量可选environment:-NODE_ENVproduction# 网络配置可选networks:-vue3-network# 网络配置可选networks:vue3-network:driver:bridge配置说明build: 指定 Dockerfile 位置container_name: 自定义容器名称ports: 将容器的 80 端口映射到主机的 8080 端口restart: 容器退出时自动重启除非手动停止networks: 创建独立网络便于容器间通信4.4 .dockerignore排除不需要复制到镜像中的文件减小镜像体积。node_modules dist .git .gitignore .vscode *.md *.log .DS_Store Thumbs.db注意不要排除.eslintrc.cjs和.eslintignore因为构建过程可能需要这些文件。五、部署步骤方法一使用 Docker Compose推荐这是最简单的方式适合大多数场景。1. 进入项目目录cd d:\MyProjects\vue32. 构建并启动容器docker-compose up-d--build参数说明up: 启动服务-d: 后台运行detached mode--build: 构建镜像如图所示外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传部署成功3. 验证部署# 查看容器状态dockerps# 查看容器日志docker-compose logs-f# 健康检查Invoke-WebRequest-Uri http://localhost:8080/health-UseBasicParsing如图所示4. 访问应用打开浏览器访问http://localhost:8080/vue3/如图所示5. 停止容器# 停止并删除容器docker-compose down# 只停止容器不删除docker-compose stop方法二使用 Docker 命令如果需要更细粒度的控制可以使用原生 Docker 命令。1. 构建镜像docker build-t vue3-app:latest.2. 运行容器docker run-d-p 8080:80--name vue3-app vue3-app:latest3. 管理容器# 查看日志docker logs-f vue3-app# 停止容器docker stop vue3-app# 启动已停止的容器dockerstartvue3-app# 重启容器docker restart vue3-app# 删除容器dockerrmvue3-app六、常见问题与解决方案问题 1无法连接到 Docker Hub错误信息failed to fetch oauth token: Post https://auth.docker.io/token: dial tcp 108.160.172.1:443: connectex解决方案配置国内镜像加速器参见 #3.2 配置 Docker 镜像加速器。问题 2ESLint 配置文件找不到错误信息[vite-plugin-eslint] No ESLint configuration found in /app/src.解决方案从.dockerignore中移除.eslintrc.cjs和.eslintignorenode_modules dist .git .gitignore .vscode -.eslintignore -.eslintrc.cjs *.md *.log .DS_Store Thumbs.db问题 3端口被占用错误信息Bind for 0.0.0.0:8080 failed: port is already allocated解决方案修改docker-compose.yml中的端口映射ports:-8081:80# 改为其他端口问题 4容器启动后无法访问排查步骤检查容器是否正在运行dockerps查看容器日志docker logs vue3-app检查 Nginx 配置docker exec-it vue3-appcat/etc/nginx/conf.d/default.conf验证文件是否正确复制docker exec-it vue3-appls-la/usr/share/nginx/html/vue3/问题 5修改代码后不生效原因Docker 镜像是不可变的代码修改后需要重新构建。解决方案docker-compose down docker-compose up-d--build或使用一条命令docker-compose up-d--build--force-recreate七、容器管理最佳实践日常开发流程# 1. 启动容器docker-compose up-d# 2. 查看日志docker-compose logs-f# 3. 代码修改后重新部署docker-compose up-d--build# 4. 停止容器docker-compose down容器生命周期管理操作Docker ComposeDocker 命令启动docker-compose up -ddocker start vue3-app停止docker-compose stopdocker stop vue3-app重启docker-compose restartdocker restart vue3-app删除docker-compose downdocker rm vue3-app查看日志docker-compose logs -fdocker logs -f vue3-app资源清理# 删除停止的容器docker container prune# 删除未使用的镜像docker image prune# 清理所有未使用的资源docker system prune-a生产环境优化移除 sourcemap修改vite.config.tsbuild:{sourcemap:false,// 生产环境不生成 sourcemap}资源限制在docker-compose.yml中添加services:vue3-app:deploy:resources:limits:cpus:0.5memory:512M健康检查services:vue3-app:healthcheck:test:[CMD,wget,--quiet,--tries1,--spider,http://localhost/health]interval:30stimeout:10sretries:3日志管理services:vue3-app:logging:driver:json-fileoptions:max-size:10mmax-file:3八、监控和日志查看实时日志# Docker Composedocker-compose logs-f# Docker 命令docker logs-f vue3-app# 只查看最近 100 行docker logs--tail 100 vue3-app容器资源监控# 查看资源使用情况docker stats vue3-app# 查看容器详细信息docker inspect vue3-app 感谢阅读想了解更多 我的博客网站 | 记录思考分享干货 我的个人主页 | 关于我、开源项目

相关新闻

基于QClaw与OpenClaw构建智能记账Agent:从Skill开发到AI应用集成实战

基于QClaw与OpenClaw构建智能记账Agent:从Skill开发到AI应用集成实战

1. 项目概述:在QClaw上构建一个会思考的记账机器人最近在折腾鹅厂的OpenClaw生态,特别是它的核心应用QClaw。这东西本质上是一个AI Agent(智能体)的集成与运行平台,你可以把它想象成一个“AI应用商店”或者“AI技能中枢…

2026/8/25 10:21:50 阅读更多 →
Docker 本地部署 SSR 前端项目实战指南

Docker 本地部署 SSR 前端项目实战指南

文章目录1. 项目技术栈2. 项目目录结构3. 核心配置文件详解3.1 Dockerfile (多阶段构建)3.2 docker-compose.yml (编排与网络)3.3 next.config.ts (构建配置)4. 为什么容器内不需要 Nginx?5. 部署步骤这篇文档详细介绍如何将基于 Next.js 的银企直连前置机管理系统(…

2026/8/25 10:21:50 阅读更多 →
Flexsim中AGV锁死问题的根源分析与四大解决策略

Flexsim中AGV锁死问题的根源分析与四大解决策略

1. 项目概述:当AGV在Flexsim中“卡住不动”时如果你刚开始用Flexsim做物流仿真,特别是涉及到AGV(自动导引车)的模型,那么“锁死”或“死锁”这个问题,你大概率很快就会遇到。想象一下这个场景:你…

2026/8/25 10:21:50 阅读更多 →

最新新闻

铝箔袋给袋机双包检测:不用改包材,磁感应双张检测器在线防叠袋

铝箔袋给袋机双包检测:不用改包材,磁感应双张检测器在线防叠袋

铝箔复合袋在给袋机上因静电吸附局部真空低摩擦系数三重叠加,双包率显著高于普通PE袋,一台80-120袋/分钟的产线,1%双包率即意味着每小时48-72个不良品 磁感应双张检测器直接检测铝箔金属层厚度差异,单双袋信号差异接近2倍&#xf…

2026/8/25 13:47:42 阅读更多 →
驱动二阶段——设备驱动

驱动二阶段——设备驱动

一、linux 字符设备驱动框架1.1linux基本驱动框架分类字符设备是流式的,如键盘、串口。块设备是存储式的,如硬盘、U盘。网络设备是通讯式的,如网卡,通过Socket访问。在/dev目录下使用ls -l查看设备的具体类型信息linux驱动模块的基…

2026/8/25 13:47:42 阅读更多 →
自由学习记录(220)

自由学习记录(220)

AC_FaceReferenceFrameToCustomPrimitiveData 然后: 左侧 My Blueprint 面板找到 Functions。点击右侧 。命名: UpdateFaceReferenceFrameCustomPrimitiveData 选中函数入口节点。在 Details 中设置: Access Specifier PublicPure fals…

2026/8/25 13:47:42 阅读更多 →
《中华人民共和国网络安全法》国企维度合规实践指南深度解读

《中华人民共和国网络安全法》国企维度合规实践指南深度解读

《中华人民共和国网络安全法》国企维度合规实践指南深度解读 导语 《中华人民共和国网络安全法》(以下简称《网安法》)作为我国网络安全领域基础性法律,确立了网络运营者安全保护义务、关键信息基础设施保护、安全监测预警、应急处置、法律责…

2026/8/25 13:47:42 阅读更多 →
芯片 PPA 和 PVT 签核工艺角(Sign-off Corners)

芯片 PPA 和 PVT 签核工艺角(Sign-off Corners)

PPA在数字集成电路(IC)与芯片设计领域,PPA 是衡量一款芯片核心竞争力的终极商业与技术指标。它是以下三个英文单词的缩写:Performance(性能)[📊]Power(功耗)[&#x1f4c…

2026/8/25 13:47:42 阅读更多 →
【python】条件语句

【python】条件语句

if语法单分支语法if 条件:条件成立执行的代码1条件成立执行的代码2......要点说明a)if后面跟条件表达式,末尾必须加冒号 : ,冒号代表代码块开始。b)冒号下方的代码,必须缩进(一般 4 个空格)&…

2026/8/25 13:46:42 阅读更多 →

日新闻

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/25 0:00:34 阅读更多 →
Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

2026/8/25 0:00:34 阅读更多 →
数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

1. 项目概述:从“会做”到“会写”的竞赛核心跃迁“全国大学生数学建模竞赛”,这个名字对理工科学生来说,分量极重。每年,无数团队在三天三夜的时间里,为一个开放性问题绞尽脑汁,从建立模型、求解算法到编程…

2026/8/25 0:00:34 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/24 20:22:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →