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

如何从同局域网Mac访问另一台Mac上Docker部署的MariaDB数据库

问题原因
  • 授权语句缺失密码配置:你编写的授权SQL仅为root@%用户分配了操作权限,未指定该用户的登录密码,默认该用户密码为空,你访问时输入了root作为密码,触发身份校验失败。
  • 初始化脚本未生效:Docker MariaDB镜像仅会在首次启动、数据卷未初始化时执行docker-entrypoint-initdb.d目录下的SQL文件,如果你是容器启动后才修改的初始化脚本,或是之前已经生成过数据库数据,修改后的SQL不会自动执行。
  • 环境变量配置有误:MariaDB官方镜像的监听地址环境变量为MYSQL_BIND_ADDRESS,你配置的BIND_ADDRESS不会被镜像识别,不过该问题不是本次1045错误的核心诱因,属于配置疏漏。
  • 存在默认匿名用户冲突:部分版本的MariaDB默认预置了无权限的root@%匿名用户,身份校验时会优先匹配到该低权限用户,导致访问被拒绝。
解决步骤

方案一:无重要数据可重置数据库的情况

  1. 执行命令删除旧容器和关联数据卷:
    docker-compose down -v
    
  2. 修改./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;
    
  3. 修改docker-compose.yml中的环境变量配置,修正监听地址参数:
    将原配置中的BIND_ADDRESS: 0.0.0.0替换为MYSQL_BIND_ADDRESS: 0.0.0.0
  4. 重新启动容器即可:
    docker-compose up -d
    

方案二:数据库有重要数据不能重置的情况

  1. 进入运行中的MariaDB容器:
    docker exec -it MARIADB bash
    
  2. 容器内执行命令登录数据库:
    mysql -u root -proot
    
  3. 依次执行以下SQL语句手动配置权限:
    DROP USER IF EXISTS 'root'@'%';
    CREATE USER 'root'@'%' IDENTIFIED BY 'root';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
  4. 退出容器后即可从局域网其他设备正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 13:24:02