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

docker-compose部署Drupal容器无法连接MySQL容器问题排查

Drupal容器连接MySQL失败排查方案

核心参数校验

首先确认Drupal安装向导填写的数据库连接参数完全匹配配置:

  • 数据库主机地址填写 compose 中定义的数据库服务名 db-drupal,禁止填写localhost或127.0.0.1,容器内部网络中服务名会自动解析为对应容器IP
  • 数据库名填写drupal,数据库用户名填写user,对应密码填写password
  • 无需额外指定端口,内部网络默认使用3306端口通信

最高发问题修复:MySQL8认证插件兼容问题

当前配置使用mysql:latest镜像,目前最新版为MySQL8.x系列,默认采用caching_sha2_password身份认证插件,Drupal内置的PHP数据库驱动暂不支持该认证方式,会直接导致连接失败。
修改docker-compose.yml中数据库服务配置,固定镜像版本、覆盖默认启动命令兼容旧认证方式:

db-drupal:
  image: mysql:8.0
  command: --default-authentication-plugin=mysql_native_password --default-storage-engine=INNODB --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
  environment:
    - MYSQL_DATABASE=drupal
    - MYSQL_USER=user
    - MYSQL_PASSWORD=password
    - MYSQL_ROOT_PASSWORD=password
  volumes:
    - Mysql:/var/lib/mysql
  restart: always
  # 新增健康检查,确认MySQL服务完全就绪
  healthcheck:
    test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-ppassword"]
    interval: 5s
    timeout: 5s
    retries: 10

修改后必须清理旧的MySQL持久化数据,否则初始化配置不会生效:

  1. 停止现有容器:docker-compose down
  2. 查询对应数据卷ID:docker volume ls | grep Mysql,找到项目前缀命名的Mysql卷
  3. 删除旧数据卷:docker volume rm 对应卷完整名称
  4. 同步修改Drupal服务的依赖规则,等待数据库就绪后再启动:
drupal:
  image: drupal:latest
  ports:
    - 80:80
  volumes:
    - Drupal_modules:/var/www/html/modules
    - Drupal_profiles:/var/www/html/profiles
    - Drupal_sites:/var/www/html/sites
    - Drupal_themes:/var/www/html/themes
  depends_on:
    db-drupal:
      condition: service_healthy
  restart: always

注:配置中的links字段在新版Compose规范中已废弃,同文件下的服务默认加入同一桥接网络,可直接通过服务名通信,该字段可直接删除。

  1. 重新启动服务:docker-compose up -d,等待30秒左右待MySQL初始化完成后,再访问安装页提交参数。

连通性兜底验证

如果修改后仍连接失败,直接进入容器内部验证网络连通性:

  1. 进入Drupal容器命令行:docker-compose exec drupal bash
  2. 安装MySQL客户端测试连接:
    apt update && apt install -y default-mysql-client
    mysql -h db-drupal -u user -ppassword drupal
    
  • 如果命令行能正常进入MySQL交互界面,说明网络、账号权限均正常,返回安装页重新提交参数即可,注意检查表单是否有多余空格、拼写错误
  • 如果提示连接拒绝,检查数据库服务是否正常启动、3306端口是否正常监听
  • 如果提示账号权限错误,进入数据库容器执行docker-compose exec db-drupal mysql -u root -ppassword -e "SELECT user,host,plugin FROM mysql.user;",确认user账号对应的认证插件为mysql_native_password,且允许同网段IP访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 21:09:58