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

本地Docker运行的MariaDB宿主机root连接报1045访问拒绝错误

问题成因
  • 你启动容器时配置了MYSQL_ROOT_HOST=localhost参数,该参数限制了root用户仅允许从容器本地(localhost)发起登录请求
  • 宿主机通过TCP协议访问容器内的MariaDB时,请求来源IP是docker网桥的网关地址172.17.0.1,不属于localhost范围,因此被权限校验拦截
  • 普通用户user可正常连接,是因为官方MariaDB镜像默认对MYSQL_USER创建的账号开放了所有来源(%)的访问权限;容器内可登录root也是因为请求来源匹配localhost限制
解决方案

场景1:还未创建容器,可在启动时调整参数

根据需要调整MYSQL_ROOT_HOST的取值,比如允许所有docker内网访问可设为172.17.0.%,临时测试允许所有来源可设为%,示例命令如下:

docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD=password -e MYSQL_USER=user -e MYSQL_DATABASE=test -e MYSQL_PASSWORD=password -e MYSQL_ROOT_HOST=172.17.0.% -p 3306:3306 -d docker.io/library/mariadb:10.4

场景2:已创建正在运行的容器,无需重建直接修改权限

  1. 进入容器内部登录root账号:
docker exec -it mariadbtest mysql -u root -p

输入root密码后进入MariaDB命令行
2. 按需执行对应授权命令,注意把命令中的你的root密码替换为实际的root账号密码:

  • 仅允许宿主机(172.17.0.1)登录root:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.17.0.1' IDENTIFIED BY '你的root密码' WITH GRANT OPTION;
  • 允许所有docker内网地址登录root:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.17.0.%' IDENTIFIED BY '你的root密码' WITH GRANT OPTION;
  • 允许所有来源登录root(不建议生产环境使用):
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的root密码' WITH GRANT OPTION;
  1. 刷新权限使配置生效:
FLUSH PRIVILEGES;

配置完成后即可在宿主机正常连接root账号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:24:08