
引言默认情况下MongoDB 容器重启或重建后所有数据库数据都会丢失。核心目标是让数据库数据保留在宿主机不受容器生命周期影响。本节课将基于一个简单的 Node.js MongoDB 应用实操演示如何使用 Docker 卷Volume实现数据持久化。核心内容Node.js MongoDB 演示环境搭建环境组成演示使用 Node.js MongoDB Mongo Express。MongoDB 提供数据库服务Mongo Express 提供可视化 Web 管理界面全部通过 Docker Compose 编排启动。应用启动步骤# 进入应用目录 cd app # 安装依赖 npm install # 启动 Node 应用监听 3000 端口 node server.js # 输出确认app listening on port 3000!数据库准备在 Mongo Express 中创建自定义数据库并创建 users 集合。Node 应用通过环境变量匹配数据库和集合名称。Docker Compose 配置 Docker 命名卷核心配置步骤在 Docker Compose 根层级定义全局卷指定驱动为 local本地存储由 Docker 管理。在 MongoDB 服务中将宿主机命名卷绑定到容器内 MongoDB 默认数据存储路径。完整配置示例version: 3 services: mongodb: image: mongo ports: - 27017:27017 environment: - MONGO_INITDB_ROOT_USERNAMEadmin - MONGO_INITDB_ROOT_PASSWORDpassword volumes: - mongo-data:/data/db mongo-express: image: mongo-express ports: - 8081:8081 restart: always environment: - ME_CONFIG_MONGODB_ADMINUSERNAMEadmin - ME_CONFIG_MONGODB_ADMINPASSWORDpassword - ME_CONFIG_MONGODB_SERVERmongodb volumes: mongo-data: driver: local容器内路径说明容器内的绑定路径必须匹配数据库官方默认存储路径否则无法实现持久化。MongoDB 默认路径为/data/dbMySQL、PostgreSQL 等其他数据库都有各自的默认数据路径需要查询官方文档确认。Docker 卷工作原理容器内/data/db目录的所有数据会同步复制到宿主机的 Docker 卷mongo-data中。容器删除重建后Docker 会自动将宿主机卷mongo-data中的数据重新同步到新容器的/data/db目录实现数据保留。宿主机层与容器层的关系宿主机层mongo-data卷持久存储所有数据库文件。容器层/data/db目录启动时从宿主机卷同步数据修改实时反向同步回宿主机。Docker 卷数据持久化验证验证流程修改应用数据确认数据写入数据库。执行docker compose down删除所有容器。执行docker compose up重新创建全新容器。打开 Mongo Express 查看原数据库、集合、数据全部保留验证持久化生效。不同操作系统的 Docker 卷存储路径操作系统默认存储路径WindowsC:\ProgramData\docker\volumesLinux/var/lib/docker/volumesMac/var/lib/docker/volumesDocker for Mac 需要特殊方式访问每个命名卷都拥有独立的唯一哈希目录数据存储在卷目录的/_data路径下。Docker Compose 创建的命名卷命名规则{项目名}_{自定义卷名}前缀会自动添加项目名称。Mac 访问 Docker 卷的特殊方法Docker for Mac 将 Docker 运行在虚拟机中宿主机默认无/var/lib/docker目录需要执行命令进入虚拟机 Shell 查看bashdocker run -it --privileged --pidhost debian nsenter -t 1 -m -u -n -i sh命名卷 vs 匿名卷类型说明命名卷用户自定义明确名称方便引用和管理生产环境推荐使用匿名卷没有用户定义名称Docker 自动生成随机唯一 ID 作为名称功能和使用方式与命名卷完全一致总结本节课通过 Node.js MongoDB 演示环境系统讲解了 Docker 卷实现数据持久化的完整流程背景痛点MongoDB 容器默认不持久化数据重启后数据全部丢失。解决方案在 Docker Compose 中定义命名卷volumes根层级绑定到 MongoDB 容器内的/data/db路径。工作原理容器内/data/db与宿主机命名卷双向同步容器删除后数据仍保留在宿主机重建后自动恢复。验证方法写入数据 → 删除容器 → 重建容器 → 数据完整保留。存储位置Windows 为C:\ProgramData\docker\volumesLinux/Mac 为/var/lib/docker/volumesMac 需要进入虚拟机访问。