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

Docker Stack部署Adminer连接MySQL报错:SQLSTATE[HY000] [2002]连接拒绝

你的Adminer连接MySQL问题排查指南

先澄清核心误解:这个报错和密码无关

首先要明确:SQLSTATE[HY000] [2002] Connection refused 是网络层面无法连接到MySQL服务的错误,和密码正确与否没关系。如果是密码错误,你会收到类似 SQLSTATE[HY000] [1045] Access denied for user 'root'@'xxx' 的提示。所以咱们先把排查方向从密码问题转到服务状态和网络连通性上。

关于root密码与文档疑问

  1. 大概率你漏了关键一步:Adminer只是数据库管理工具,本身不包含MySQL服务!如果你的stack.yml里只定义了Adminer,那自然没有可连接的数据库——很多新手会忽略官方示例的隐含前提:示例默认你已经有一个运行中的MySQL服务。
  2. 如果你确实在stack里配置了MySQL服务,root密码完全由你在容器环境变量里的设置决定:
    • 比如你在stack.yml的MySQL服务块里写了MYSQL_ROOT_PASSWORD: example,那密码就是example;
    • 要是没设置这个变量,MySQL容器启动时会生成随机密码,你需要用docker logs <你的MySQL容器ID/名称>查看日志里的初始密码。
  3. 文档本身没问题,但它的定位是“快速部署Adminer”,而非“部署Adminer+MySQL整套环境”,所以会省略数据库服务的配置说明。

Windows 10 Pro环境的潜在干扰点

  1. 容器网络的服务名访问逻辑:Docker for Windows用WSL2后端时,stack部署的服务会在专属的overlay网络里。此时你在Adminer里填服务器地址,不能用localhost/127.0.0.1/0.0.0.0——这些地址在Adminer容器里指向它自己,而非宿主机或MySQL容器。正确的做法是填MySQL服务在stack里的名称(比如你给MySQL服务起的db)。
  2. WSL2网络转发异常:虽然你能访问localhost:8080的Adminer,但WSL2偶尔会出现端口转发不稳定的情况。不过stack内部服务用overlay网络通信,不需要依赖宿主机端口转发,所以这个概率较低。
  3. 防火墙/杀毒软件拦截:Windows Defender或第三方杀毒软件可能误拦截Docker容器之间的网络请求,你可以暂时关闭防护工具测试是否解决问题。

还需要你提供的关键信息

  • 你的stack.yml完整内容:这是排查的核心,能确认是否包含MySQL服务、配置是否正确;
  • 执行docker stack services adminer的输出:查看MySQL服务(如果有的话)是否处于running状态;
  • MySQL容器的日志内容:用docker logs <MySQL容器名称>获取,看看服务是否正常初始化、有没有启动报错;
  • 你在Adminer界面填写的服务器地址具体值:确认是否用了服务名而非localhost类地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:41:57