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

Docker Compose部署MySQL遇「服务器请求未知认证方法」错误求助

解决Docker部署MySQL + Adminer时出现"The server requested authentication method unknown to the client"错误

这个问题我部署的时候也碰到过,根源很明确:MySQL 8.0及以上版本默认启用了caching_sha2_password这种更安全的认证插件,但部分版本的Adminer(或者其他旧数据库客户端)还不支持这个认证方式,所以连接时就会抛出这个错误。下面给你几个实用的解决办法:

方法一:修改MySQL默认认证插件(最便捷)

直接在你的stack.yml里给MySQL服务添加环境变量,强制它使用旧的mysql_native_password认证方式,这样Adminer就能正常连接了。修改后的配置如下:

# Use root/example as user/password credentials
version: '3.1'
services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 'pass'
      MYSQL_DATABASE: 'db'
      MYSQL_USER: 'user'
      MYSQL_PASSWORD: 'pass'
      # 新增这一行,指定默认认证插件为mysql_native_password
      MYSQL_DEFAULT_AUTH: mysql_native_password
  adminer:
    image: adminer
    restart: always
    ports:
      - 8888:8080

修改完配置后,需要清理旧的容器和数据卷(因为之前的数据卷已经保存了旧的用户认证信息),然后重新启动:

# 停止并移除当前容器
docker-compose -f stack.yml down
# 删除关联的MySQL数据卷(注意:这会清空所有数据库数据,有重要数据请先备份)
docker volume rm $(docker volume ls -q -f name=$(basename $(pwd))_*)
# 重新启动容器
docker-compose -f stack.yml up -d

方法二:手动修改已有用户的认证方式(适合已有数据的场景)

如果你的数据库里已经有数据,不想删除数据卷,可以先启动容器(虽然连接报错,但容器本身是运行的),然后进入容器修改用户的认证插件:

  1. 先查看MySQL容器的名称或ID:
docker ps
  1. 进入MySQL容器的命令行:
docker exec -it <你的MySQL容器名/ID> mysql -uroot -ppass
  1. 执行SQL修改用户的认证方式:
-- 修改普通用户的认证插件
ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';
-- 修改root用户的认证插件(如果需要用root连接的话)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';
-- 刷新权限使修改生效
FLUSH PRIVILEGES;

执行完这些命令后,重启Adminer容器就能正常连接了。

方法三:升级Adminer到兼容版本

部分新版本的Adminer已经支持caching_sha2_password认证,你可以尝试指定adminer:latest或者更高版本的镜像,不过这种方式有时候会因为镜像缓存或者版本兼容问题不生效,所以还是前两种方法更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:42:03