Docker安装WordPress连接不上数据库的解决方法

来自:素雅营销研究院

头像 方知笔记
2025年04月30日 13:26

问题描述

在使用Docker安装WordPress时,许多用户会遇到一个常见问题:WordPress容器无法连接到MySQL/MariaDB数据库。当访问WordPress站点时,通常会看到”建立数据库连接时出错”的错误提示。

可能原因分析

  1. 数据库容器未正确启动:MySQL/MariaDB容器可能没有正常运行
  2. 网络配置问题:WordPress和数据库容器不在同一Docker网络中
  3. 连接参数错误:wp-config.php中的数据库配置不正确
  4. 权限问题:数据库用户没有足够的权限
  5. 端口冲突:3306端口可能被其他服务占用

详细解决方案

1. 检查容器状态

首先确认所有容器都已启动并运行正常:

docker ps -a

确保MySQL和WordPress容器的STATUS列都显示为”Up”。

2. 创建自定义Docker网络

推荐为WordPress和数据库创建一个专用网络:

docker network create wordpress_network

然后运行MySQL容器时加入该网络:

docker run --name mysql_db --network wordpress_network -e MYSQL_ROOT_PASSWORD=yourpassword -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress -d mysql:5.7

运行WordPress容器时也加入同一网络:

docker run --name wordpress --network wordpress_network -e WORDPRESS_DB_HOST=mysql_db -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpress -e WORDPRESS_DB_NAME=wordpress -p 8080:80 -d wordpress

3. 验证数据库连接

进入WordPress容器测试数据库连接:

docker exec -it wordpress bash
apt-get update && apt-get install -y mysql-client
mysql -h mysql_db -u wordpress -p

输入密码后应能成功连接数据库。

4. 检查wp-config.php配置

如果使用已有WordPress安装,确保wp-config.php中包含正确的数据库信息:

define('DB_NAME', 'wordpress');
define('DB_USER', 'wordpress');
define('DB_PASSWORD', 'wordpress');
define('DB_HOST', 'mysql_db');

5. 防火墙和端口检查

确保没有防火墙阻止容器间的通信:

sudo ufw status

如果启用,添加规则允许Docker通信:

sudo ufw allow from 172.16.0.0/12

常见错误排查

  1. Error establishing a database connection
  • 检查数据库容器是否运行
  • 验证数据库用户名和密码
  1. Unknown MySQL server host ‘mysql’
  • 确认使用了正确的容器名称作为主机名
  • 确认两个容器在同一网络
  1. Access denied for user
  • 重新创建数据库用户并授予权限
  • 检查密码是否匹配

最佳实践建议

  1. 使用Docker Compose简化管理
  2. 为生产环境设置数据库持久化存储
  3. 定期备份数据库
  4. 使用最新稳定版的镜像
  5. 为不同项目创建独立的Docker网络

通过以上步骤,应该能够解决Docker中WordPress连接数据库的问题。如果问题仍然存在,可以查看容器日志获取更多信息:

docker logs mysql_db
docker logs wordpress