You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Docker-Compose部署时出现WordPress数据库连接/认证错误

排查Docker Compose下WordPress与MySQL的连接/认证错误

看起来你遇到了Docker环境下WordPress连不上MySQL的典型问题,我帮你一步步拆解排查方向,先从最容易忽略的配置细节开始:

1. 先补全WordPress的服务配置(你贴的片段里没包含这部分)

你的docker-compose.yml只定义了MySQL服务,但WordPress服务的配置才是连接的核心。如果没正确配置WordPress的环境变量,肯定会报连接错误。这里给你一个标准的配套配置模板,重点看WordPress的环境变量:

version: '2'
services:
  mysql:
    image: mysql:latest
    container_name: mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_USER=user
      - MYSQL_PASSWORD=password
      - MYSQL_DATABASE=wordpress  # 新增:初始化时自动创建WordPress需要的数据库
    ports:
      - '3306:3306'
    volumes:
      - mysql_data:/var/lib/mysql  # 持久化MySQL数据,避免容器重启丢失

  wordpress:
    image: wordpress:latest
    container_name: wordpress
    restart: always
    environment:
      - WORDPRESS_DB_HOST=mysql:3306  # 重点!用MySQL的服务名(不是localhost),Docker内部网络通过服务名互通
      - WORDPRESS_DB_USER=user
      - WORDPRESS_DB_PASSWORD=password
      - WORDPRESS_DB_NAME=wordpress
    ports:
      - '80:80'
    volumes:
      - wordpress_data:/var/www/html
    depends_on:
      - mysql  # 确保MySQL先启动(但不保证完全初始化,WordPress会自动重试)

volumes:
  mysql_data:
  wordpress_data:

2. 验证MySQL的用户权限与数据库状态

即使配置了用户,MySQL默认的用户权限可能限制了远程(容器内)连接:

  • 先查看MySQL容器的启动日志,确认初始化无错误:
    docker-compose logs mysql
    
    日志里如果出现ready for connections说明MySQL正常启动。
  • 进入MySQL容器,检查用户的访问权限:
    docker exec -it mysql mysql -uroot -proot
    
    进入MySQL命令行后执行:
    SELECT user, host FROM mysql.user;
    
    你需要确保user(或root用户)的host是%,而不是localhost——因为WordPress容器是通过Docker内部网络连接,不是MySQL容器的本地localhost,%表示允许任意主机访问。
  • 如果host不对,执行以下命令修改权限:
    ALTER USER 'user'@'%' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;
    
    (如果用root用户连接,就把user换成root)

3. 测试容器间的网络连通性

有时候问题出在Docker网络不通,你可以直接在WordPress容器里测试MySQL连接:

  • 先找到WordPress容器的名称(如果用上面的配置就是wordpress),进入容器:
    docker exec -it wordpress bash
    
  • 在容器内ping MySQL服务名,看能不能连通:
    ping mysql
    
    如果能ping通,说明网络没问题;如果不行,检查两个服务是否在同一个docker-compose网络里(默认同一个compose文件的服务会在同一网络)。
  • 再用MySQL客户端直接连接测试:
    mysql -h mysql -uuser -ppassword
    
    如果能成功进入MySQL命令行,说明MySQL的用户和权限没问题,问题大概率在WordPress的配置上;如果连不上,回到第二步检查MySQL的用户权限。

4. 关于root用户连接的注意事项

你提到已经试过root用户,但默认mysql:latest镜像的root用户host是localhost,只能在MySQL容器内部访问,所以需要先修改root用户的host为%,再用root用户配置WordPress的环境变量:

ALTER USER 'root'@'%' IDENTIFIED BY 'root';
FLUSH PRIVILEGES;

然后把WordPress的WORDPRESS_DB_USER设为root,WORDPRESS_DB_PASSWORD设为root即可。

按上面的步骤一步步排查,应该能定位到问题所在。

内容的提问来源于stack exchange,提问作者larsrbak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:05:55