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

Linux下Docker容器中MySQL无法连接的问题求助

Docker MySQL容器连接失败:Host '172.21.0.1' 不允许连接的排查与解决

问题核心分析

从你的配置和日志来看,主要有两个关键问题:

  1. MYSQL_ROOT_HOST的生效规则:这个环境变量仅在MySQL容器第一次初始化数据库目录时生效,如果之前已经创建过数据卷,后续修改该变量不会覆盖已有的用户权限配置。
  2. 端口与连接协议的匹配:日志显示容器内的MySQL X Plugin(文档存储扩展服务)占用了33060端口,但你的docker-compose是把宿主33060映射到容器的3306端口(传统MySQL协议),若DBeaver默认启用X协议,会导致连接请求发往错误端口。

分步解决方法

1. 清理旧数据卷,重新初始化容器(最有效)

你之前启动过容器,数据卷里已保存旧的用户权限配置,MYSQL_ROOT_HOST: '%'不会重新生效。执行以下命令彻底重置:

# 停止并删除容器
docker-compose down
# 查看当前项目的mysql数据卷名称
docker volume ls | grep mysql
# 删除对应的数据卷(替换成上面查到的卷名,比如xxx_mysql)
docker volume rm xxx_mysql
# 重新启动容器
docker-compose up -d

注:此操作会清空所有数据库数据,测试环境可放心执行。

2. 修正DBeaver的连接配置

打开DBeaver连接设置,确保:

  • 端口填写33060(对应docker-compose的宿主端口映射)
  • 进入「高级」选项卡,取消勾选「使用X协议」(X协议对应容器内33060端口,你未映射该端口到宿主)
  • 关闭SSL配置:取消勾选「启用SSL」,或在「SSL属性」中选择「无」

3. 手动进入容器授权root用户(备选方案)

若清理数据卷后仍无效,直接进入容器修改用户权限:

# 进入mysql容器,输入密码secret登录
docker exec -it mysqldb mysql -u root -psecret
# 执行授权命令,允许root从任何主机连接
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# 退出mysql命令行
exit

4. 验证端口占用情况

确认宿主机器的33060端口未被其他程序占用:

# Windows系统
netstat -ano | findstr :33060
# Linux/macOS系统
lsof -i :33060

若端口被占用,修改docker-compose的ports配置(比如改成33061:3306),重新启动容器后用新端口连接。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:24:51