如何从同局域网Mac访问另一台Mac上Docker部署的MariaDB数据库
问题原因
- 授权语句缺失密码配置:你编写的授权SQL仅为
root@%用户分配了操作权限,未指定该用户的登录密码,默认该用户密码为空,你访问时输入了root作为密码,触发身份校验失败。 - 初始化脚本未生效:Docker MariaDB镜像仅会在首次启动、数据卷未初始化时执行
docker-entrypoint-initdb.d目录下的SQL文件,如果你是容器启动后才修改的初始化脚本,或是之前已经生成过数据库数据,修改后的SQL不会自动执行。 - 环境变量配置有误:MariaDB官方镜像的监听地址环境变量为
MYSQL_BIND_ADDRESS,你配置的BIND_ADDRESS不会被镜像识别,不过该问题不是本次1045错误的核心诱因,属于配置疏漏。 - 存在默认匿名用户冲突:部分版本的MariaDB默认预置了无权限的
root@%匿名用户,身份校验时会优先匹配到该低权限用户,导致访问被拒绝。
解决步骤
方案一:无重要数据可重置数据库的情况
- 执行命令删除旧容器和关联数据卷:
docker-compose down -v - 修改
./init/01.sql内容为:DROP USER IF EXISTS 'root'@'%'; CREATE USER 'root'@'%' IDENTIFIED BY 'root'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; - 修改
docker-compose.yml中的环境变量配置,修正监听地址参数:
将原配置中的BIND_ADDRESS: 0.0.0.0替换为MYSQL_BIND_ADDRESS: 0.0.0.0 - 重新启动容器即可:
docker-compose up -d
方案二:数据库有重要数据不能重置的情况
- 进入运行中的MariaDB容器:
docker exec -it MARIADB bash - 容器内执行命令登录数据库:
mysql -u root -proot - 依次执行以下SQL语句手动配置权限:
DROP USER IF EXISTS 'root'@'%'; CREATE USER 'root'@'%' IDENTIFIED BY 'root'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; - 退出容器后即可从局域网其他设备正常访问。
内容的提问来源于stack exchange,提问作者firecall
相关产品推荐
相关产品推荐

