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密码与文档疑问
- 大概率你漏了关键一步:Adminer只是数据库管理工具,本身不包含MySQL服务!如果你的
stack.yml里只定义了Adminer,那自然没有可连接的数据库——很多新手会忽略官方示例的隐含前提:示例默认你已经有一个运行中的MySQL服务。 - 如果你确实在stack里配置了MySQL服务,root密码完全由你在容器环境变量里的设置决定:
- 比如你在
stack.yml的MySQL服务块里写了MYSQL_ROOT_PASSWORD: example,那密码就是example; - 要是没设置这个变量,MySQL容器启动时会生成随机密码,你需要用
docker logs <你的MySQL容器ID/名称>查看日志里的初始密码。
- 比如你在
- 文档本身没问题,但它的定位是“快速部署Adminer”,而非“部署Adminer+MySQL整套环境”,所以会省略数据库服务的配置说明。
Windows 10 Pro环境的潜在干扰点
- 容器网络的服务名访问逻辑:Docker for Windows用WSL2后端时,stack部署的服务会在专属的overlay网络里。此时你在Adminer里填服务器地址,不能用localhost/127.0.0.1/0.0.0.0——这些地址在Adminer容器里指向它自己,而非宿主机或MySQL容器。正确的做法是填MySQL服务在stack里的名称(比如你给MySQL服务起的
db)。 - WSL2网络转发异常:虽然你能访问localhost:8080的Adminer,但WSL2偶尔会出现端口转发不稳定的情况。不过stack内部服务用overlay网络通信,不需要依赖宿主机端口转发,所以这个概率较低。
- 防火墙/杀毒软件拦截:Windows Defender或第三方杀毒软件可能误拦截Docker容器之间的网络请求,你可以暂时关闭防护工具测试是否解决问题。
还需要你提供的关键信息
- 你的
stack.yml完整内容:这是排查的核心,能确认是否包含MySQL服务、配置是否正确; - 执行
docker stack services adminer的输出:查看MySQL服务(如果有的话)是否处于running状态; - MySQL容器的日志内容:用
docker logs <MySQL容器名称>获取,看看服务是否正常初始化、有没有启动报错; - 你在Adminer界面填写的服务器地址具体值:确认是否用了服务名而非localhost类地址。
内容的提问来源于stack exchange,提问作者Guill
相关产品推荐
相关产品推荐

