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

如何解决MariaDB容器中ERROR 1045 (28000)访问拒绝问题?

问题诊断

出现ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)的核心原因有三点:

  1. 执行mysql命令时未显式指定root用户,系统默认尝试用当前shell用户登录,而非数据库root账号
  2. MariaDB服务启动后未等待完全初始化就执行SQL命令,导致连接失败
  3. mysqladmin的密码参数格式不规范,特殊场景下会解析错误
修复方案

替换你的auto_config.sh脚本为以下内容:

# 等待MariaDB服务完全就绪,避免过早执行SQL命令
until mysqladmin ping -h localhost --silent; do
    sleep 1
done

# 显式指定root用户执行SQL,初始无密码无需-p参数
mysql -u root -e "CREATE DATABASE IF NOT EXISTS \`${SQL_DATABASE}\`;"
mysql -u root -e "CREATE USER IF NOT EXISTS \`${SQL_USER}\`@'localhost' IDENTIFIED BY '${SQL_PASSWORD}';"
mysql -u root -e "GRANT ALL PRIVILEGES ON \`${SQL_DATABASE}\`.* TO \`${SQL_USER}\`@'%' IDENTIFIED BY '${SQL_PASSWORD}';"
mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '${SQL_ROOT_PASSWORD}';"
mysql -u root -e "FLUSH PRIVILEGES;"

# 规范密码参数格式,避免特殊字符解析异常
mysqladmin -u root --password="$SQL_ROOT_PASSWORD" shutdown

exec mysqld_safe
额外检查项
  • 确保Dockerfile中给脚本添加可执行权限:RUN chmod +x /auto_config.sh(路径根据你的实际情况调整)
  • 脚本必须作为容器启动命令(CMD或ENTRYPOINT)执行,不要在构建阶段运行,否则环境变量无法正确注入
  • 可在脚本开头添加echo $SQL_ROOT_PASSWORD验证环境变量是否成功传递

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:05:38