如何解决MariaDB容器中ERROR 1045 (28000)访问拒绝问题?
问题诊断
出现ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)的核心原因有三点:
- 执行
mysql命令时未显式指定root用户,系统默认尝试用当前shell用户登录,而非数据库root账号 - MariaDB服务启动后未等待完全初始化就执行SQL命令,导致连接失败
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
相关产品推荐
相关产品推荐

