在使用 Docker 部署 WordPress 时,目录映射(Volumes)是确保数据持久化的核心。很多用户会纠结:既然已经映射了 wp-content,核心程序文件夹 html 还有必要映射并备份吗?本文将为您深度解析。
一、 核心原理:为什么要保留 ./html 映射?
在你的 docker-compose.yml 配置中,通常会有类似以下的挂载项:
./wp-data:/var/www/html/wp-content:存放主题、插件和上传的媒体文件。./html:/var/www/html:存放 WordPress 核心程序文件。./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:存放 PHP 环境优化配置。
1. 为什么 ./html 不能随便删除?
虽然你可能没有手动修改过这个目录里的 PHP 文件,但 WordPress 在运行中会自动生成关键内容:
- wp-config.php:这是网站的“大脑”,存储了数据库连接信息。即便你在 Compose 里写了环境变量,该文件也是网站识别已安装状态、连接数据库的物理凭证。
- .htaccess:决定了伪静态规则(如美化链接)。如果丢失,网站内页可能会报 404 错误。
二、 备份策略:哪些是“命根子”数据?
一套完整的 WordPress 备份方案必须包含以下三个核心部分:
- 数据库 (SQL 文件):包含所有文章、页面、评论和用户设置。
- wp-content 目录 (wp-data):包含所有图片、视频、已安装的主题和插件。
- 关键配置文件:即
wp-config.php、.htaccess以及你的docker-compose.yml和uploads.ini。
三、 实战:如何恢复你的网站?
方案 A:全量备份恢复(最简单、最推荐)
如果你备份了包含 ./html 目录在内的整个项目文件夹:
- 上传文件:将备份的整个文件夹上传至新服务器。
- 启动环境:
docker-compose up -d - 恢复数据库:
# 将备份的 SQL 导入数据库容器 # 注意:替换 <数据库容器名> 为你 yml 中的 container_name,<数据库名> 为变量中的值 docker exec -i <数据库容器名> mysql -u root -p'你的密码' <数据库名> < ./backups/db_backup.sql - 修正权限
# 确保容器内的 www-data 用户(UID 33)对映射文件夹有权读写 sudo chown -R 33:33 ./html ./wp-data
方案B:精简备份恢复(仅核心数据)
如果你为了节省空间,只备份了 wp-data、sql 和单个 wp-config.php:
-
调整配置:在 docker-compose.yml 中不再挂载整个 ./html 文件夹,而是精准挂载这几个独立文件。
-
启动服务:Docker 会自动从镜像中填充缺失的核心程序,并覆盖使用你提供的配置文件。
四、 常见问题 (FAQ)
-
恢复后提示“建立数据库连接错误”?
-
请检查 wp-config.php 中的数据库主机名是否与 docker-compose.yml 中的数据库服务名一致。
-
确认 SQL 数据库是否已成功导入。
-
评论区