You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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_DATABASEMYSQL_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

火山引擎 最新活动