Docker Volume中WordPress数据库访问与站点恢复问题
解决Docker WordPress卷恢复问题的实操步骤
1. 先确认卷内数据是否存活
先别瞎调配置,先确认你的mysql_vol和wdp_vol里真的有旧数据:
- 查MySQL卷:运行
docker run --rm -v mysql_vol:/mysql_data busybox ls -la /mysql_data,看有没有wordpress文件夹、.ibd这类数据库文件 - 查WordPress卷:运行
docker run --rm -v wdp_vol:/wp_data busybox ls -la /wp_data,看有没有wp-config.php、wp-content文件夹,尤其是wp-content里的主题、上传文件是否还在
2. 核对环境变量与数据库匹配度
WordPress跳新安装,90%是数据库连不上或旧数据没被识别,先查这几点:
- 打开
.env文件,确认MYSQL_ROOT_PASSWORD、MYSQL_USER、MYSQL_PASSWORD和你之前用的完全一致,多一个空格都不行 - 登phpMyAdmin(http://localhost:8080),用root账号进去看
wordpress数据库是否存在,里面有没有wp_posts、wp_options这些表。如果数据库是空的,说明mysql_vol要么没挂载对,要么已经被清空了 - 如果数据库有旧表,查
wp_options里的siteurl和home字段,改成你现在访问的地址(http://localhost:8000)
3. 从WordPress卷捞备份(如果数据库卷挂了)
要是mysql_vol真的没数据了,但wdp_vol还在,至少能捞回内容:
- 把卷内文件复制到本地:
docker run --rm -v wdp_vol:/wp_data -v $(pwd)/wp_backup:/backup busybox cp -r /wp_data/* /backup,本地会生成wp_backup文件夹 - 检查
wp_backup/wp-content/backups(部分主题/插件会自动存备份),有SQL文件就直接在phpMyAdmin导入 - 就算没备份,
wp-content里的主题、插件、上传文件都在,重新装WordPress后替换wp-content就行
4. 修正Docker Compose配置细节
你的compose文件有几个坑,调整后再试:
- 去掉
external: true(除非你手动把卷设成了外部卷),改成直接指定卷名,让Compose关联已存在的卷:
volumes: mysql_vol: name: mysql_vol wdp_vol: name: wdp_vol
- 给db服务加健康检查,避免WordPress启动时MySQL还没就绪:
services: db: # 保留原有配置,新增健康检查 healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"] interval: 5s timeout: 5s retries: 5 wordpress: depends_on: db: condition: service_healthy # 等MySQL健康检查通过再启动
- 重启服务:
docker compose down && docker compose up -d
5. 极端情况:临时挂载卷排查
以上都不行,直接挂载卷到临时容器手动查:
- 临时启动MySQL容器看数据:
docker run --rm -it -v mysql_vol:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=你的root密码 mysql:8.0.32 bash # 进容器后登录MySQL mysql -uroot -p # 查数据库 show databases; use wordpress; show tables;
- 临时启动Apache容器看WordPress文件:
docker run --rm -p 8001:80 -v wdp_vol:/var/www/html httpd:2.4 # 访问http://localhost:8001,看能不能看到旧站点内容,或者下载wp-config.php查数据库配置
内容的提问来源于stack exchange,提问作者gxs
相关产品推荐
相关产品推荐

