尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

在Windows上进行Docker 部署速成指南(SpringBoot + Vue + MySQL + Redis)

在Windows上进行Docker 部署速成指南(SpringBoot + Vue + MySQL + Redis)
📅 发布时间:2026/6/26 4:27:28

适用场景:前后端分离项目,一键容器化部署,本地开发 / 测试环境通用。


零、前置下载

网上已经有很多教程了,这里楼主推荐一篇感觉讲的很详细的:Docker,ubuntu下载

一、整体架构

浏览器 → Nginx容器(80端口) → 静态页面 ↘ /api → SpringBoot容器(内部端口) → MySQL容器 ↘ Redis容器

核心流程:

  • 所有容器加入同一个自定义网络,通过容器名互相访问,不用记 IP
  • 数据卷持久化,删容器不丢数据
  • Nginx 统一对外入口,托管前端 + 反向代理后端

二、前置准备

1. 创建自定义网络

dockernetwork create app-network

app-network:自定义网络名,这里建议自己设置

2. 创建项目目录结构

mkdir-p~/deploy/{mysql,redis,backend,frontend/dist}

注:这里建议在deploy/后加一层项目名文件夹,如果改的话下面的命令里地址也要注意多加一层

三、部署 MySQL

dockerrun-d\--namemysql\--networkapp-network\-p3307:3306\-v~/deploy/mysql:/var/lib/mysql\-eMYSQL_ROOT_PASSWORD=你的数据库密码\-eMYSQL_DATABASE=你的数据库名\-eTZ=Asia/Shanghai\mysql:8.0\--character-set-server=utf8mb4\--collation-server=utf8mb4_unicode_ci

注:3307是你的windows端口号,选一个不冲突的即可
导入 SQL 脚本:

dockerexec-imysql mysql-uroot-p你的密码 你的库名<~/mnt/你的数据库文件绝对地址(全小写)

四、部署 Redis

dockerrun-d\--nameredis\--networkapp-network\-p6379:6379\-v~/deploy/redis:/data\-eTZ=Asia/Shanghai\redis:7\--appendonlyyes

后端配置对应:

spring:redis:host:redisport:6379

五、部署 SpringBoot 后端

1. 修改项目配置(重点)

数据库和 Redis 地址写容器名,不要写 localhost

spring:datasource:url:jdbc:mysql://mysql:3306/你的数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=falseusername:rootpassword:你的数据库密码redis:host:redisport:6379

2. 打包 Jar 包

mvn clean package-DskipTests

将target/xxx.jar上传到~/deploy/backend/目录。

cp/mnt/你的jar包绝对位置(全小写) ~/deploy/backend/

3. 启动后端容器

dockerrun-d\--namebackend\--networkapp-network\-p8099:8080\-v~/deploy/backend:/app\-eTZ=Asia/Shanghai\eclipse-temurin:17-jdk-alpine\java-jar/app/你的jar包名.jar

JDK8 项目换成openjdk:8-jdk-slim

4. 关键注意

  • 端口映射格式:-p 宿主机端口:容器内部端口
  • 容器内部端口看启动日志:Tomcat started on port(s): xxxx
  • 容器间通信用容器名 + 内部端口,不用宿主机端口

5. 验证

dockerlogs-fbackend# 看到 Started xxxApplication 即为成功

六、部署 Vue 前端(Nginx)

如果你还没有下nginx,先运行:

dockerpull nginx


像图片这样就好辣
然后配置nginx:

nano~/deploy/你的项目名,之前没设置不管/frontend/nginx.conf

在打开的文件里粘贴:

server{listen80;server_name localhost;# Vue静态资源location /{root /usr/share/nginx/html;index index.html;try_files$uri$uri/ /index.html;}# 拦截/api请求,转发给后端容器location /api/{proxy_pass http://backend:8082/;proxy_set_header Host$host;proxy_set_header X-Real-IP$remote_addr;proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;}}

1. 修改前端接口地址

打开.env.production,不要写死 IP+端口:

VITE_BASE_URL=/api

Vue2 项目变量名一般是VUE_APP_BASE_API

2. 打包前端

npmrun build

将dist目录所有文件上传到~/deploy/frontend/dist/。

3. 创建 Nginx 配置

nano~/deploy/frontend/nginx.conf
server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html; try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://backend:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

Ctrl+o,回车保存
Ctrl+x退出

proxy_pass里的端口是后端容器内部端口,不是宿主机端口。

4. 启动 Nginx 容器

dockerrun-d\--namefrontend\--networkapp-network\-p80:80\-v~/deploy/frontend/dist:/usr/share/nginx/html\-v~/deploy/frontend/nginx.conf:/etc/nginx/conf.d/default.conf\-eTZ=Asia/Shanghai\nginx

七、常用运维命令

# 查看状态dockerpsdockerps-a# 查看日志dockerlogs 容器名dockerlogs-f容器名dockerlogs--tail200容器名# 启停重启dockerstart 容器名dockerstop 容器名dockerrestart 容器名dockerrm-f容器名# 进入容器dockerexec-it容器名sh# 整套服务一键启停dockerstop mysql redis backend frontenddockerstart mysql redis backend frontend

八、常见问题排查

1. 后端连接重置(Connection reset)

  1. 看容器是否运行:docker ps
  2. 看启动日志:docker logs backend
  3. 确认内部端口:日志里Tomcat started on port(s): xxxx
  4. 端口映射是否匹配

2. 数据库连接失败

  • MySQL 容器是否启动
  • 地址是否写的容器名mysql:3306(不是 localhost)
  • 两个容器是否在同一个 network

3. 前端页面能打开但接口报错

  • 前端打包环境变量是否是/api
  • Nginxproxy_pass地址端口是否正确
  • 后端容器是否正常运行

4. WSL2 端口映射异常

Windows PowerShell 执行:

wsl--shutdown

5. JDK 版本不兼容

  • JDK8 →openjdk:8-jdk-slim
  • JDK17 →eclipse-temurin:17-jdk-alpine

九、部署 Checklist

  • 创建自定义 Docker 网络
  • MySQL 容器启动正常
  • Redis 容器启动正常
  • 后端配置数据库/Redis 地址改为容器名
  • 后端 Jar 包打包上传
  • 后端容器启动成功,日志无报错
  • 前端生产环境接口地址改为/api
  • 前端打包 dist 上传
  • Nginx 配置反向代理地址正确
  • 浏览器访问页面 + 接口均正常

相关新闻

  • Obsidian Excel转Markdown表格插件:3分钟解决表格粘贴难题
  • 自我介绍与未来展望
  • 33-静态源码入库与异步落库:为什么静态结构要先缓存再落仓

最新新闻

  • 6.25-----
  • 2025门店稳配增效实战:3步拆解功效护肤项目高复购与收现底层逻辑
  • 【无人机协同任务】基于虚拟引导结合MPC的人工势场算法实现无人机群系统协同攻击,提升动态环境中的任务成功率并降低风险附Matlab代码
  • 2026年常见文献管理工具优缺点横评:7款主流软件功能对比与客观选型参考
  • HarmonyOS技术精讲-UI开发调试调优:从零认识ArkUI调试体系
  • 如何用KeymouseGo实现自动化操作:鼠标键盘录制与重复执行的终极指南

日新闻

  • Qwen2.5-Turbo百万上下文实战指南:百炼平台长文本处理全解析
  • 怎么监控对标账号更新,2026年作者监控工作流,5款深度对比
  • EdgeRemover:专业级Windows Edge浏览器管理工具,彻底解决顽固软件卸载难题

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号