RuoYi-Vue 项目 Docker 容器化部署 + DockerHub 上传全流程

本文详细记录本人在实际项目从 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 脚本

彻底解决步骤:
  1. 确保 SQL 文件挂载无误

  2. docker-compose.yml 必须有这一行:

    bash 复制代码
    - ./ruoyi-vue-docker/docker/mysql/ry-vue.sql:/docker-entrypoint-initdb.d/ry-vue.sql
  3. 清理脏数据卷会清空数据库,开发环境可放心,生产环境务必备份!

    bash 复制代码
    docker compose down -v    # 强制移除所有数据卷
    rm -rf mysql_data/
  4. 重新 up,首次会自动导入 SQL 初始化完整表结构

    bash 复制代码
    docker compose up -d
    # 此时 mysql/ry-vue.sql 脚本会被自动执行,数据库完整生成
  5. 进容器手动检查

    bash 复制代码
    docker exec -it mysql bash
    mysql -u root -p
    # 输入 123456
    show databases;
    use ry-vue;
    show tables;   # 必须有 sys_config、sys_user 等所有表
  6. 如仍无表,检查 ry-vue.sql 路径拼写/权限、compose 配置,日志排查是否有报错

2. 端口404/服务404 常见场景

  • 端口被占用(如本机已运行 MySQL/Redis/Nginx)

    • 解决:compose 改端口,如 3307:3306
  • 服务未正常启动或前端Nginx未指向后端端口

    • 解决:docker compose logs -f backend 排查,确认 backendfrontend 均为 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. 新电脑/服务器极速上线流程

  1. git clone 代码仓库

    bash 复制代码
    git clone https://gitee.com/xxx/xxx.git
    cd RuoYi-Deploy
  2. (可选)如使用 DockerHub 镜像,compose 文件直接写 image 字段

    bash 复制代码
    backend:
      image: yourname/ruoyi-backend:1.0
    frontend:
      image: yourname/ruoyi-frontend:1.0
  3. 启动

    bash 复制代码
    docker 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 配置:

    bash 复制代码
    rm -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 -ltree 命令核对

3. 数据库 SQL 导入失败排查

  • 手动进入 mysql 容器,用 mysql -u root -p ry-vue < /ry-vue.sql 检查语法、路径和权限

九. 经验总结

  1. 本地打包、Docker Compose 部署、SQL初始化、Gitee管理,缺一不可

  2. clone 新环境后,第一时间检查所有必需目录和文件

  3. mysql_data/redis_data 持久化防丢失,SQL初始化最保险

  4. 遇到404/数据库报错,99%是持久化卷脏数据或SQL脚本缺失/未导入

  5. 上传 DockerHub 后新环境部署极致快,完全不用再装环境!

  6. .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 编写建议
相关推荐
做运维的阿瑞8 小时前
Windows 环境下安装 Node.js 和 Vue.js 框架完全指南
前端·javascript·vue.js·windows·node.js
李贺梖梖8 小时前
DAY23 单例设计模式、多例设计模式、枚举、工厂设计模式、动态代理
java
武昌库里写JAVA8 小时前
Java设计模式之工厂模式
java·vue.js·spring boot·后端·sql
Dontla9 小时前
Tailwind CSS介绍(现代CSS框架,与传统CSS框架Bootstrap对比)Tailwind介绍
前端·css·bootstrap
yinuo10 小时前
uniapp微信小程序安卓手机Touchend事件无法触发
前端
赛姐在努力.10 小时前
SpringMVC中的常用注解及使用方法
java·spring
让我上个超影吧11 小时前
黑马点评秒杀优化和场景补充
java
寻星探路11 小时前
Java EE初阶启程记06---synchronized关键字
java·java-ee
沉木渡香11 小时前
【VSCode中Java开发环境配置的三个层级之Maven篇】(Windows版)
java·vscode·maven
EnCi Zheng11 小时前
Spring Boot 4.0.0-SNAPSHOT @Configuration 问题解决指南
java·spring boot·spring