Docker部署MariaDB+WordPress时数据库连接认证失败问题排查
解决Docker Compose部署WordPress+MariaDB的数据库连接失败问题
我来帮你排查和解决这个数据库连接失败的问题,主要有两个常见的原因,咱们一步步来处理:
1. 数据库初始化未完成,WordPress就提前发起连接
你配置的depends_on只是确保MariaDB容器启动了,但数据库服务本身需要时间完成初始化(创建数据库、用户、配置权限),这时候WordPress容器已经开始尝试连接,就会出现日志里的未认证连接失败提示。
解决方法:添加健康检查,让WordPress等数据库就绪后再启动
修改你的docker-compose.yml,给MariaDB服务加上健康检查,同时让WordPress依赖数据库的健康状态:
version: '3' services: db: container_name: wp-mysql image: mariadb volumes: - $PWD/data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: 12345678 MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress ports: - "3307:3306" networks: - my_net restart: on-failure # 添加健康检查,确认数据库服务就绪 healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p12345678"] timeout: 20s retries: 10 wp: # 修改依赖条件,等待数据库健康检查通过 depends_on: db: condition: service_healthy container_name: wp-web volumes: - "$PWD/html:/var/www/html" image: wordpress ports: - "8010:80" environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress # 建议显式指定数据库名,和MariaDB配置对应,避免默认值歧义 WORDPRESS_DB_NAME: wordpress networks: - my_net networks: my_net:
2. 已有数据卷干扰了数据库初始化
如果你的$PWD/data目录之前已经存在(比如之前部署过MariaDB),MariaDB镜像只会在第一次启动(数据目录为空)时执行初始化脚本——也就是说你配置的MYSQL_DATABASE、MYSQL_USER这些环境变量不会生效,数据库里根本没有wordpress用户和对应的数据库,自然连接失败。
解决方法:
方案A(适合第一次部署,无重要数据):
删除现有数据卷,重新初始化数据库:
# 停止并删除容器 docker-compose down # 删除数据目录 rm -rf $PWD/data # 重新启动容器 docker-compose up -d
方案B(保留现有数据,手动创建用户和数据库):
如果data目录里有重要数据不想删除,可以手动进入MariaDB容器配置:
# 进入MariaDB容器的命令行 docker exec -it wp-mysql mysql -uroot -p12345678
在MySQL命令行里执行以下命令:
# 确保wordpress数据库存在 CREATE DATABASE IF NOT EXISTS wordpress; # 创建wordpress用户,允许从任意主机连接 CREATE USER IF NOT EXISTS 'wordpress'@'%' IDENTIFIED BY 'wordpress'; # 授予该用户对wordpress数据库的所有权限 GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'%'; # 刷新权限使配置生效 FLUSH PRIVILEGES;
执行完成后退出容器,重启WordPress容器:
docker-compose restart wp
最后验证
等容器都稳定运行后,访问http://localhost:8010,应该就能正常进入WordPress的安装向导了。
内容的提问来源于stack exchange,提问作者Eduard Pinuaga




