本文详细记录本人在实际项目从 RuoYi-Vue 二次开发到 Docker 镜像打包、DockerHub 上传、异地一键部署的完整实战全过程。涵盖前后端打包产物准备、SQL初始化、docker-compose 管理、DockerHub 镜像上传、Gitee 代码管理、子模块大坑、数据库404等所有可能出错细节,全部都有真实复现和终极解决方法!
一. 项目整体结构与最终目录
项目目标是实现一套完整、可迁移、可一键部署的"智慧园区机器人管理平台",底层基于 RuoYi-Vue,后端 Java(Spring Boot),前端 Vue/Nginx,数据库 MySQL8、Redis,所有服务都用 Docker Compose 管理,支持多环境部署。
最终部署产物目录(建议结构如下):
RuoYi-Deploy/
│
├─ docker-compose.yml # Docker一键编排文件(关键)
├─ mysql_data/ # MySQL持久化目录,首次为空,部署后生成
├─ redis_data/ # Redis持久化目录,首次为空
├─ ruoyi-vue-docker/ # 自定义Docker部署目录(关键,易丢!)
│ ├─ docker/
│ │ ├─ nginx/
│ │ │ ├─ Dockerfile
│ │ │ └─ nginx.conf
│ │ ├─ redis/
│ │ │ └─ Dockerfile
│ │ ├─ mysql/
│ │ │ ├─ Dockerfile
│ │ │ └─ ry-vue.sql # 数据库初始化脚本(关键,易忘)
│ │ ├─ ruoyi/
│ │ │ ├─ Dockerfile
│ │ │ ├─ application-docker.yml
│ │ │ └─ ruoyi-admin.jar
│ └─ nginx/html/dist/ # 前端Vue打包目录
│ └─ ...
└─ .gitignore
二. 前后端打包与产物收集
1. 后端打包
bash
cd smart-park---code\RuoYi-Vue
# 在Ruoyi根目录打包后端jar文件
mvn clean package -DskipTests
2. 前端打包
bash
cd ruoyi-ui
npm install
npm run build
3. 准备数据库 SQL 脚本
- 用 Navicat 等工具导出"ry-vue"完整库结构与数据为
ry-vue.sql
,放到ruoyi-vue-docker/docker/mysql/
目录下(一定不要漏!)
这一部分如果有问题,可以参考我的这篇文章: RuoYi-Vue 单项目 Docker 全流程部署实战教程-CSDN博客
三. Dockerfile 编写与 Compose 配置
1. 后端 ruoyi-admin Dockerfile(示例)
Dockerfile
bash
FROM openjdk:8-jre
WORKDIR /app
COPY ruoyi-admin.jar .
COPY application-docker.yml .
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "ruoyi-admin.jar", "--spring.profiles.active=docker"]
2. docker-compose.yml 关键配置(含所有服务)
bash
version: '3.9'
services:
mysql:
image: mysql:8.0
container_name: mysql
environment:
#你自己在ruoyi-admin中的MYSQL设置的密码
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: ry-vue
ports:
- "3306:3306"
volumes:
- ./mysql_data:/var/lib/mysql
- ./ruoyi-vue-docker/docker/mysql/ry-vue.sql:/docker-entrypoint-initdb.d/ry-vue.sql
restart: always
redis:
image: redis:7
container_name: redis
ports:
- "6379:6379"
volumes:
- ./redis_data:/data
restart: always
backend:
build: ./ruoyi-vue-docker/docker/ruoyi
container_name: ruoyi-backend
depends_on:
- mysql
- redis
ports:
- "8080:8080"
restart: always
frontend:
build: ./ruoyi-vue-docker/docker/nginx
container_name: ruoyi-frontend
ports:
- "80:80"
restart: always
3. 一键启动与调试命令
bash
docker compose up -d # 一键启动全部服务
docker compose down # 停止并移除
docker compose logs -f backend
docker compose logs -f mysql
docker compose restart backend
四. 最容易卡住的数据库404和端口问题全复现与解决!
1. 最常见数据库404错误:"sys_config 表不存在"踩坑复盘
问题表现 :
后端启动日志持续报错,内容类似
bash
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'ry-vue.sys_config' doesn't exist
...
Caused by: org.springframework.jdbc.BadSqlGrammarException
...
真实原因梳理:
-
MySQL数据库容器启动时,未正确初始化表结构 (
ry-vue.sql
没被正确导入) -
或者数据卷 mysql_data/ 已有脏数据 ,MySQL 发现已有库就不会再导入 sql 脚本!
彻底解决步骤:
-
确保 SQL 文件挂载无误
-
docker-compose.yml
必须有这一行:bash- ./ruoyi-vue-docker/docker/mysql/ry-vue.sql:/docker-entrypoint-initdb.d/ry-vue.sql
-
清理脏数据卷 (会清空数据库,开发环境可放心,生产环境务必备份!)
bashdocker compose down -v # 强制移除所有数据卷 rm -rf mysql_data/
-
重新 up,首次会自动导入 SQL 初始化完整表结构
bashdocker compose up -d # 此时 mysql/ry-vue.sql 脚本会被自动执行,数据库完整生成
-
进容器手动检查
bashdocker exec -it mysql bash mysql -u root -p # 输入 123456 show databases; use ry-vue; show tables; # 必须有 sys_config、sys_user 等所有表
-
如仍无表,检查 ry-vue.sql 路径拼写/权限、compose 配置,日志排查是否有报错
2. 端口404/服务404 常见场景
-
端口被占用(如本机已运行 MySQL/Redis/Nginx)
- 解决:compose 改端口,如
3307:3306
- 解决:compose 改端口,如
-
服务未正常启动或前端Nginx未指向后端端口
- 解决:
docker compose logs -f backend
排查,确认backend
、frontend
均为 running
- 解决:
-
代码配置文件中的数据库连接串和实际启动参数不一致
- 解决:
application-docker.yml
里数据库密码与 compose 保持一致
- 解决:
五. DockerHub 镜像推送与远程服务器一键部署
1. 本地 Build 并上传 DockerHub
bash
docker build -t yourname/ruoyi-backend:1.0 ./ruoyi-vue-docker/docker/ruoyi
docker build -t yourname/ruoyi-frontend:1.0 ./ruoyi-vue-docker/docker/nginx
docker login
docker push yourname/ruoyi-backend:1.0
docker push yourname/ruoyi-frontend:1.0
2. 新电脑/服务器极速上线流程
-
git clone 代码仓库
bashgit clone https://gitee.com/xxx/xxx.git cd RuoYi-Deploy
-
(可选)如使用 DockerHub 镜像,compose 文件直接写 image 字段
bashbackend: image: yourname/ruoyi-backend:1.0 frontend: image: yourname/ruoyi-frontend:1.0
-
启动
bashdocker compose up -d
只要持久化数据卷和 SQL 脚本齐全,服务能100%还原。

六. Gitee代码管理与 .gitignore/submodule大坑
1. 只排除数据,不能排除任何源码/配置/打包产物
推荐 .gitignore:
bash
mysql_data/
redis_data/
docker/mysql/db/
*.log
*.pid
*.sock
.DS_Store
Thumbs.db
# 千万不要排除如下内容,否则 clone 后文件夹全空:
# - ruoyi-vue-docker/
# - dist/
# - *.jar
# - *.sql
# - docker-compose.yml
# - application-*.yml
# - 任何你自己写的脚本和配置
2. 子模块/嵌套仓库问题终极解决
-
彻底删除 submodule 配置:
bashrm -f .gitmodules git rm --cached -r ruoyi-vue-docker rm -rf .git/modules/ruoyi-vue-docker git add -f ruoyi-vue-docker/ git commit -m "fix: 清除submodule, 全量上传" git push origin master
-
确认每次 clone 下来 ruoyi-vue-docker 目录及全部文件都在!
七. 新电脑部署常见问题
1.端口冲突的完整排查方法
常见于新电脑部署、宿主机已装 MySQL
典型报错:
bash
Error response from daemon: ports are not available: exposing port TCP 0.0.0.0:3306...
排查命令:
bash
netstat -ano | findstr 3306
若有 mysqld.exe
,请关闭或改端口:
-
修改
docker-compose.yml
映射为3307:3306
-
连接数据库时端口改为 3307

2.数据库初始化失败的现象与解决
现象:
启动后服务报错,日志中有:
bash
Table 'ry-vue.sys_config' doesn't exist
原因:
- 数据持久卷目录(如 mysql_data)已存在但内容为空或未初始化
解决办法:
bash
docker compose down -v
rm -rf ./mysql_data
docker compose up -d
必要时手动导入 SQL 文件(docker cp
+ docker exec
进入 mysql 容器导入)
八. 其它常见问题与建议
1. 容器日志/服务状态调试命令
bash
docker compose ps
docker compose logs backend
docker compose logs mysql
2. 防止"空目录/丢文件"
-
clone 后务必对照本地完整目录结构核查
-
IDE里多用"显示隐藏文件/全部文件"模式
-
可用
ls -l
或tree
命令核对
3. 数据库 SQL 导入失败排查
- 手动进入 mysql 容器,用
mysql -u root -p ry-vue < /ry-vue.sql
检查语法、路径和权限
九. 经验总结
-
本地打包、Docker Compose 部署、SQL初始化、Gitee管理,缺一不可
-
clone 新环境后,第一时间检查所有必需目录和文件
-
mysql_data/redis_data 持久化防丢失,SQL初始化最保险
-
遇到404/数据库报错,99%是持久化卷脏数据或SQL脚本缺失/未导入
-
上传 DockerHub 后新环境部署极致快,完全不用再装环境!
-
.gitignore 只排除数据目录,配置和产物千万不要排除
十. 思维导图
bash
RuoYi-Vue 前后端打包 + Docker部署实战全流程
│
├─ 1. 打包准备
│ ├─ Maven 打包后端 JAR
│ ├─ NPM 打包前端 dist
│ └─ 检查 SQL 文件、配置(application-docker.yml)
│
├─ 2. Docker 化部署
│ ├─ 编写 docker-compose.yml
│ │ ├─ ruoyi-backend(SpringBoot JAR)
│ │ ├─ ruoyi-frontend(Nginx + 前端dist)
│ │ ├─ mysql(挂载 ry-vue.sql 初始化、数据持久化)
│ │ └─ redis
│ ├─ 配置 .env、application-docker.yml(数据库密码一致)
│ └─ 一键启动:docker compose up -d
│
├─ 3. 容器常见问题与解决
│ ├─ 3.1 MySQL 端口/密码冲突
│ │ ├─ 修改3306为3307
│ │ └─ 数据库密码和配置必须一致
│ ├─ 3.2 SQL初始化404、sys_config不存在
│ │ ├─ 检查 ry-vue.sql 挂载路径
│ │ ├─ docker cp 手动导入SQL
│ │ ├─ 容器内执行 mysql -u root -p ry-vue < /ry-vue.sql
│ │ └─ 常见报错分析(出错日志截图/片段)
│ ├─ 3.3 .gitignore与submodule导致项目丢文件
│ │ ├─ 不要忽略 ruoyi-vue-docker/
│ │ ├─ 正确处理submodule:rm -f .gitmodules 等
│ │ └─ 强制 git add -f ruoyi-vue-docker/
│ └─ 3.4 日志分析与容器排查
│ ├─ docker logs ruoyi-backend | grep ERROR
│ ├─ 容器健康状态 docker ps
│ └─ 关键日志、常见输出(如 sys_config 表不存在)
│
├─ 4. 镜像上传 DockerHub
│ ├─ docker build -t yourname/ruoyi-backend:1.0 .
│ ├─ docker push yourname/ruoyi-backend:1.0
│ └─ pull 到新服务器一键部署
│
├─ 5. 项目上传 Gitee
│ ├─ 清理 .gitmodules、submodule、.git 目录残留
│ ├─ git add -f ruoyi-vue-docker/
│ ├─ git commit/push 全量上传
│ └─ 新环境 git clone 完整目录
│
├─ 6. 新环境迁移部署
│ ├─ git clone 仓库
│ ├─ docker compose up -d
│ └─ 必要时手动导入 ry-vue.sql
│
└─ 7. 常见踩坑总结
├─ SQL表不存在/404、mysqld.sock等错误处理
├─ 日志分析、端口占用、环境变量冲突
├─ .gitignore 文件误写导致文件丢失
└─ 部署文档/README 编写建议