Laradock 数据与卷管理实战指南:数据路径、持久化、备份与重置
后端开发工具DevOps【免费下载链接】laradockFull PHP development environment for Docker. Run Laravel, Symfony, CodeIgniter, Phalcon, WordPress, Drupal, Magento, Moodle, or any PHP project with 70 pre-configured services: Nginx, Apache, PHP-FPM, MySQL, PostgreSQL, MongoDB, Redis, Elasticsearch more.项目地址https://gitcode.com/gh_mirrors/la/laradock点击查看免费下载Laradock 将宿主机与容器之间需要共享的内容精确地划分为两类通过 bind mount 实时映射的项目代码以及存放在宿主机固定目录DATA_PATH_HOST下的服务数据数据库、缓存、上传文件等。本文以 DOCUMENTATION/docs/volumes.md 为主线结合仓库中的.env.example、各服务的compose.yml与 Laradock CLI 命令完整讲解 Laradock 的数据存放位置、为何重建容器后数据仍在、如何备份与重置单个服务的数据以及多项目并存时的数据隔离方案。读完本文你将能安全地对 MySQL、PostgreSQL、Redis 等任一服务的数据进行备份、迁移与清理并理解数据在 Laradock 体系中的完整生命周期。两类存储代码与数据Laradock 从宿主机挂载进容器的内容只有两类这是理解整个数据模型的基础项目代码以 live bind mount 方式挂载。宿主机路径APP_CODE_PATH_HOST默认../即存放 Laradock 的上层目录被挂载到容器内的APP_CODE_PATH_CONTAINER默认/var/www。宿主机上修改文件容器内立即可见因此不存在把代码拷贝进容器这一步——这正是 Laradock 开发体验的核心。服务数据数据库、缓存、上传文件统一存放在DATA_PATH_HOST默认~/.laradock/data下。每个服务拥有自己的子目录MySQL 在~/.laradock/data/mysqlPostgreSQL 在~/.laradock/data/postgresRedis 在~/.laradock/data/redis依此类推。因为两者都位于宿主机而非容器内部所以停止、删除甚至重建容器都不会丢失数据。源码中的路径配置这些路径在仓库根目录的 .env.example 中集中定义是 Laradock 数据模型的源头### Paths ################################################# # Point to the path of your applications code on your host APP_CODE_PATH_HOST../ # Point to where the APP_CODE_PATH_HOST should be in the container APP_CODE_PATH_CONTAINER/var/www # You may add flags to the path :cached, :delegated. APP_CODE_CONTAINER_FLAG:cached # Choose storage path on your machine. For all storage systems DATA_PATH_HOST~/.laradock/data # NOTE: each database engine keeps its data in a sub-folder here (mysql/, postgres/, ...). # A server will NOT start against data created by a newer major version (databases do not # downgrade). If a DB container keeps restarting after you change its *_VERSION below, # either set the version back to match the existing data, or remove that engines # sub-folder inside DATA_PATH_HOST to start fresh (this deletes that databases local data).从注释可以读出两个关键信息其一APP_CODE_CONTAINER_FLAG默认为:cached这是 macOS 上优化文件共享性能的挂载标志详见 DOCUMENTATION/docs/environment.md 中的 macOS 性能优化一节可改为:delegated其二数据库引擎的数据都按子目录存放且数据库无法向低版本降级——若你改了MYSQL_VERSION之类的版本变量导致容器反复重启要么把版本改回去匹配已有数据要么删除该引擎在DATA_PATH_HOST下的子目录以全新启动。compose 文件中如何落地以 MySQL 为例mysql/compose.yml 将宿主机数据目录 bind mount 到容器内的数据路径volumes: - ${DATA_PATH_HOST}/mysql:/var/lib/mysql - ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.dPostgreSQL 同样如此见 postgres/compose.ymlvolumes: - ${DATA_PATH_HOST}/postgres:/var/lib/postgresql/data而代码挂载在 workspace/compose.yml 中体现为volumes: - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG}即${APP_CODE_PATH_HOST}挂载到${APP_CODE_PATH_CONTAINER}并附加${APP_CODE_CONTAINER_FLAG}标志最终效果等价于../:/var/www:cached。除此之外主 docker-compose.yml 还声明了少量 named volume如arangodb、elasticsearch、mssql、prometheus、ollama等用于存放镜像自身或工具产生的数据但绝大多数有状态服务的持久化数据都走DATA_PATH_HOST的 bind mount这是 Laradock 数据管理的重心。为什么重建容器后数据依然存在停止或删除容器永远不会触碰你的数据。无论是使用 Laradock CLI 还是原生 Docker Compose效果一致# Laradock CLI ./laradock remove # 或 Docker Compose docker compose down两条命令都会移除运行中的容器但DATA_PATH_HOST下的所有内容原封不动地留在磁盘上。重新启动服务后数据库会回到你离开时的状态分毫不差。真正会抹掉数据的操作只有两种手动删除该服务的数据目录下文重置或清除单个服务。带--no-cache的重建它会重新初始化一个卷。需要特别注意的是这一条针对的是 Docker named volume 的重建行为——对于走DATA_PATH_HOSTbind mount 的服务--no-cache重建镜像不会清空宿主机上的数据目录但会重新执行镜像入口脚本如 MySQL 的docker-entrypoint-initdb.d初始化逻辑因此把--no-cache视为可能触发数据初始化的危险操作是稳妥的。Laradock CLI 的命令语义也印证了这一点在 DOCUMENTATION/docs/cli.md 的命令表中./laradock stop明确标注Your data is kept数据保留./laradock remove明确标注Delete the containers. Your data on disk is kept删除容器磁盘数据保留。这是 Laradock 设计上的承诺容器是无状态的数据只属于宿主机目录。备份某个服务的数据由于数据只是宿主机上的普通文件备份的本质就是复制目录。为保证文件一致性建议先停止该服务再复制./laradock stop mysql # 或: docker compose stop mysql cp -r ~/.laradock/data/mysql ~/mysql-backup对于数据库而言逻辑导出logical dump比直接复制原始文件更具可移植性——原始数据文件与数据库引擎的版本强绑定换一个版本就可能无法读取而 SQL dump 是跨版本的通用格式。在容器内执行逻辑导出./laradock exec mysql mysqldump -udefault -psecret mydatabase backup.sql这里的./laradock exec等价于docker compose exec是在不进入容器的情况下执行单条命令。default/secret是 Laradock 的默认数据库账号密码可在.env或对应服务的defaults.env中修改见 mysql/defaults.env其中MYSQL_USERdefault、MYSQL_PASSWORDsecret。仓库中各服务的文档也采用了完全一致的备份套路。例如 DOCUMENTATION/docs/services/caching-queues/redis.md 备份 Redis 的 RDB 快照文件cp ${DATA_PATH_HOST:-~/.laradock/data}/redis/dump.rdb backup.rdb而 DOCUMENTATION/docs/services/caching-queues/aerospike.md 甚至给出了带时间戳的备份命名惯例cp -r ${DATA_PATH_HOST:-~/.laradock/data}/aerospike ./aerospike-backup-$(date %Y%m%d)注意这些服务文档中的${DATA_PATH_HOST:-~/.laradock/data}写法如果.env中未设置DATA_PATH_HOSTshell 会自动回退到默认值~/.laradock/data保证命令在任何环境都能直接运行——这也是你在脚本中引用该路径时的推荐写法。重置或清除单个服务有时你需要让某个服务从干净状态重新开始例如应用新的数据库密码凭据只在首次启动时写入初始化见下方解释清除损坏的数据库让引擎重建全新的数据文件。做法是删除该服务的数据目录./laradock stop mysql # 或: docker compose stop mysql rm -rf ~/.laradock/data/mysql ./laradock start mysql # 或: docker compose up -d mysql下次启动时服务会以全新状态重新初始化。这一操作只影响你删除目录的那个服务其余服务的数据不受任何影响。关于凭据只在首次启动时写入仓库的配置结构可以佐证MySQL 的账号密码通过 mysql/compose.yml 中的MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORD、MYSQL_ROOT_PASSWORD环境变量传入而 MySQL 官方镜像的入口脚本只会在数据目录为空首次初始化时执行docker-entrypoint-initdb.d并创建这些账号数据目录已存在时环境变量不会再次生效。因此修改密码后必须删除~/.laradock/data/mysql才能让新密码生效。同理MYSQL_ENTRYPOINT_INITDB默认./mysql/docker-entrypoint-initdb.d见 mysql/defaults.env目录下的初始化 SQL 也只会在首次启动时执行。:::warning 警告 删除数据目录是永久性操作。只要有任何可能还需要这些数据请务必先备份见上一节。 :::各服务数据子目录速查仓库中每个有状态服务的compose.yml都遵循${DATA_PATH_HOST}/服务名的约定重置方法与 MySQL 完全相同。部分示例服务数据子目录对应容器内路径MySQL~/.laradock/data/mysql/var/lib/mysqlPostgreSQL~/.laradock/data/postgres/var/lib/postgresql/dataRedis~/.laradock/data/redis/dataRDB 快照dump.rdbKafka / Zookeeper~/.laradock/data/kafka、~/.laradock/data/zookeeper—RabbitMQ~/.laradock/data/rabbitmq—Mosquitto~/.laradock/data/mosquitto/data—例如重置 RedisDOCUMENTATION/docs/services/caching-queues/redis.md 中即为rm -rf ${DATA_PATH_HOST:-~/.laradock/data}/redisKafka 则需要同时清掉 Kafka 与 Zookeeper 两处目录见 DOCUMENTATION/docs/services/caching-queues/kafka.md。如果你不确定某服务的数据目录直接查看对应目录下的compose.yml中volumes段的${DATA_PATH_HOST}/...挂载行即可。按项目隔离数据当同一台机器上同时运行多个 Laradock 实例时必须为每个项目设置独立的DATA_PATH_HOST以及COMPOSE_PROJECT_NAME否则多个项目会共享同一份磁盘上的数据库造成数据串扰COMPOSE_PROJECT_NAMEmyproject DATA_PATH_HOST~/.laradock/data-myprojectCOMPOSE_PROJECT_NAME用于隔离容器——它决定容器名称前缀默认是目录名例如laradock_workspace_1避免两个项目生成同名容器而冲突。默认值见 .env.exampleCOMPOSE_PROJECT_NAMElaradock。DATA_PATH_HOST用于隔离数据——每个项目把数据写到各自的目录如~/.laradock/data-myproject/mysql互不相干。这两个变量必须同时设置缺一不可只改COMPOSE_PROJECT_NAME而忘记改DATA_PATH_HOST两个项目仍会读写同一份数据库文件。完整的多项目配置方案见 DOCUMENTATION/docs/multiple-projects.md其中还包含另一种思路如果多个站点愿意共享同一个 Laradock 实例可以将APP_CODE_PATH_HOST指向父目录APP_CODE_PATH_HOST../再在nginx/sites或apache2/sites下为每个站点添加一份虚拟主机配置实现一套栈服务多个项目。两种模式的选择标准是项目之间是否需要完全隔离各自独立的 PHP 版本、服务与数据还是可以共享同一套容器栈。数据相关注意事项小结永远不要直接在容器内拷贝代码代码是 bind mount 的宿主机的修改即时生效容器内没有独立的代码副本。DATA_PATH_HOST目录既是备份的源也是重置的目标cp -r即可备份rm -rf子目录即可重置这也是数据即文件模型的最大便利。数据库版本升级是数据安全的高危操作数据库不向下兼容。从 .env.example 的注释和 mysql/defaults.env 的提示MYSQL_VERSION可选 5.7 / 8.0 / 8.4 / 9.0且明确注明changing the major version? see the DATA_PATH_HOST note above可以确认变更大版本前要么接受旧数据不可用并清空对应子目录要么先完整备份再升级。./laradock系列命令是数据操作的统一入口stop停止并保留数据、remove删容器保留数据、exec在容器内执行备份/导出命令、start重新拉起。在脚本中引用数据路径时推荐使用${DATA_PATH_HOST:-~/.laradock/data}的写法以获得默认值回退。掌握数据在宿主机、容器可随意重建这一核心心智模型后无论是日常备份、迁移环境还是修复损坏的服务你都可以用最朴素的文件操作安全完成而不必担心 Docker 层的任何重建动作会带走你的数据。赞分享后端开发工具DevOps【免费下载链接】laradockFull PHP development environment for Docker. Run Laravel, Symfony, CodeIgniter, Phalcon, WordPress, Drupal, Magento, Moodle, or any PHP project with 70 pre-configured services: Nginx, Apache, PHP-FPM, MySQL, PostgreSQL, MongoDB, Redis, Elasticsearch more.项目地址https://gitcode.com/gh_mirrors/la/laradock点击查看免费下载相关推荐Nuclide容器数据卷管理持久化存储与备份Nuclide容器数据卷管理持久化存储与备份 Nuclide作为基于Atom构建的开源IDE提供了丰富的容器开发支持。本文将详细介绍如何在Nuclide中管开发工具DockerUI卷管理终极指南5步实现数据持久化与安全备份DockerUI卷管理终极指南5步实现数据持久化与安全备份 想要确保Docker容器数据永不丢失DockerUI提供了简单直观的卷管理界面让数据持久化和备云原生运维PyGWalker 可视化安装部署完整指南PyGWalker 可视化安装部署完整指南 新同事入职第一天任务是在一台干净机器上把 PyGWalker 跑起来。PyGWalker 安装完成后把一个 p数据分析数据可视化上一篇aiosql项目SQL查询定义详解下一篇告别繁琐配置Willow 4.0日志库迁移实战指南从3.x到4.0无缝升级创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Triton Inference Server 参数扩展(Parameters Extension)详解:自定义推理参数与 HTTP/gRPC 请求头转发

Triton Inference Server 参数扩展(Parameters Extension)详解:自定义推理参数与 HTTP/gRPC 请求头转发

模型推理服务AI 应用后端 【免费下载链接】server The Triton Inference Server provides an optimized cloud and edge inferencing solution. 项目地址: https://gitcode.com/gh_mirrors/server117/server 点击查看 免费下载 本文基于 Triton Inference Server …

2026/9/23 16:37:34 阅读更多 →
图解原理:3步搞定腾讯收购supercell后端高并发架构

图解原理:3步搞定腾讯收购supercell后端高并发架构

图解原理:3步搞定腾讯收购supercell后端高并发架构 刚拿到这份关于“腾讯收购supercell”技术复盘的Demo代码,是不是直接跑就报错了?别慌,这不是你的错,而是环境依赖和配置陷阱在作祟。很多开发者习惯从GitHub或博客直接复…

2026/9/23 16:37:33 阅读更多 →
漫游二觉性能优化:5步搞定完整示例,告别教程依赖症

漫游二觉性能优化:5步搞定完整示例,告别教程依赖症

漫游二觉性能优化:5步搞定完整示例,告别教程依赖症 看了一堆教程还是不会写项目?别慌,这不仅是你的问题,也是大多数开发者的通病。教程里只给你看“完美状态”的代码,却忽略了真实项目里的脏数据、并发冲突和内存泄漏。今天我们把 漫游二觉…

2026/9/23 16:37:33 阅读更多 →

最新新闻

2026最新怎么注册营业执照,程序员如何搭建个人开发环境

2026最新怎么注册营业执照,程序员如何搭建个人开发环境

2026最新怎么注册营业执照,程序员如何搭建个人开发环境 刚学会Python语法,打开VS Code却不知从何下手?这是90%新手最真实的困境。2026最新的技术栈迭代很快,但基础项目搭建逻辑没变。很多教程只讲“怎么写代码”,却忽略了“怎么…

2026/9/23 18:37:48 阅读更多 →
swagger-codegen Go 客户端模型生成实战:MixedPropertiesAndAdditionalPropertiesClass 与附加属性机制解析

swagger-codegen Go 客户端模型生成实战:MixedPropertiesAndAdditionalPropertiesClass 与附加属性机制解析

swagger-codegen Go 客户端模型生成实战:MixedPropertiesAndAdditionalPropertiesClass 与附加属性机制解析 【免费下载链接】swagger-codegen swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in dif…

2026/9/23 18:37:48 阅读更多 →
3个坑:郎波源码解析与高频面试题避坑指南

3个坑:郎波源码解析与高频面试题避坑指南

3个坑:郎波源码解析与高频面试题避坑指南 配置环境就卡半天,是不是让你怀疑人生? 刚打开IDEA,依赖没拉下来,报错信息长得像天书。 更扎心的是,面试时被问到 高频面试题 里的并发细节,脑子一片空白。…

2026/9/23 18:37:48 阅读更多 →
Rami原理图解:3步搞定性能优化,告别报错崩溃

Rami原理图解:3步搞定性能优化,告别报错崩溃

Rami原理图解:3步搞定性能优化,告别报错崩溃 盯着屏幕上一长串红色的 StackTrace ,你是不是脑子嗡的一声,完全不知道从哪行代码开始查?这种“报错一堆看不懂”的绝望感,在调试 Rami…

2026/9/23 18:37:48 阅读更多 →
六丁神火手写实现:3步跑通完整示例,告别文档迷茫

六丁神火手写实现:3步跑通完整示例,告别文档迷茫

六丁神火手写实现:3步跑通完整示例,告别文档迷茫 打开官方文档看“六丁神火”相关并发模型,是不是感觉像进了迷宫?全是理论图表,找不到一个能直接跑通的 完整示例 。…

2026/9/23 18:37:48 阅读更多 →
YOLO红花目标检测数据集:10000张图片+VOC/COCO/YOLO标签+划分脚本+训练教程

YOLO红花目标检测数据集:10000张图片+VOC/COCO/YOLO标签+划分脚本+训练教程

简介:本资源为YOLO红花目标检测数据集,面向从事目标检测算法学习与实战的开发者、学生及科研人员,可解决红花识别场景下数据获取难、标注格式不统一的问题。数据集包含10000张真实场景高质量图片,场景丰富,经labelimg精…

2026/9/23 18:36:47 阅读更多 →

日新闻

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A…

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →