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

使用docker-compose部署MySQL时登录报错:服务器请求未知认证方法

解决MySQL Docker容器与Adminer的认证方式不兼容问题

这个报错SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client的核心原因很明确:你用的是MySQL 8.0.11(从启动日志里能看到),这个版本开始默认使用caching_sha2_password作为认证插件,但Adminer使用的PHP MySQL驱动暂时不支持这种新的认证方式,导致握手失败。

下面给你两种可行的解决方法:

方法一:修改Docker Compose配置,让MySQL默认使用旧认证方式

直接修改你的stack.yml,给MySQL服务添加启动命令,强制使用mysql_native_password(也就是MySQL 5.x时代的旧认证插件):

version: '3.1'
services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
    # 添加这一行,指定默认认证插件
    command: --default-authentication-plugin=mysql_native_password
  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

然后执行以下命令重启容器:

# 先停止并删除现有容器
docker-compose -f stack.yml down
# 重新启动
docker-compose -f stack.yml up

重启后再用Adminer登录,就能正常连接了。

方法二:在已运行的MySQL容器中修改root用户的认证方式

如果你不想重新创建容器,可以直接进入运行中的MySQL容器,手动修改root用户的认证插件:

  1. 先找到MySQL容器的名称或ID:
docker ps

(你会看到类似hibernate_db_1的容器名)

  1. 进入容器并登录MySQL:
docker exec -it hibernate_db_1 mysql -uroot -pexample
  1. 执行SQL语句修改root用户的认证方式:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'example';
FLUSH PRIVILEGES;

这里用'root'@'%'是因为Docker版MySQL的root用户默认允许从任意主机访问,执行完刷新权限后,退出容器再用Adminer登录即可。

补充说明

从你的终端日志里还能看到Adminer用的是PHP 7.2.5,这个版本的mysqli或pdo_mysql扩展对caching_sha2_password的支持还不完善,所以切换回旧认证方式是最直接的兼容方案。如果后续Adminer更新了驱动,或者你升级了PHP版本,就可以再切换回MySQL 8.0的新认证插件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:42:31