Docker容器连接MySQL遇1045错误:Access denied for user 'root'@'172.19.0.2'
问题描述
运行Docker容器时遭遇MySQL访问拒绝错误,日志详情如下:
2022-12-21 22:49:28 Running Rboxlo on port 80 2022-12-21 22:49:28 SqlError: (conn=6, no: 1045, SQLState: 28000) Access denied for user 'root'@'172.19.0.2' (using password: YES) 2022-12-21 22:49:28 text: "(conn=6, no: 1045, SQLState: 28000) Access denied for user 'root'@'172.19.0.2' (using password: YES)", 2022-12-21 22:49:28 sql: null, 2022-12-21 22:49:28 fatal: true, 2022-12-21 22:49:28 errno: 1045, 2022-12-21 22:49:28 sqlState: '28000', 2022-12-21 22:49:28 code: 'ER_ACCESS_DENIED_ERROR' 2022-12-21 22:49:28 }
当前.env文件配置:
# Database DB_PASSWORD=passhere DB_USERNAME=root DB_NAME=rboxlo
已通过phpMyAdmin创建对应数据库,但Docker容器无法连接数据库,导致注册页面无限加载。
解决方案
1. 修正MySQL用户权限
错误提示root@172.19.0.2无访问权限,说明root用户未授权从Docker容器所在子网访问数据库:
- 进入MySQL容器(或本地MySQL实例),执行授权SQL:
GRANT ALL PRIVILEGES ON rboxlo.* TO 'root'@'172.19.%' IDENTIFIED BY 'passhere'; FLUSH PRIVILEGES;
172.19.%匹配容器所在的子网段,确保容器IP在该范围内。
2. 规范.env文件格式
将配置变量拆分到单独行,避免解析异常:
# Database DB_PASSWORD=passhere DB_USERNAME=root DB_NAME=rboxlo
同时确保Docker容器正确加载该文件:使用docker-compose.yml的env_file字段,或启动容器时添加--env-file参数。
3. 核对数据库连接主机
如果使用docker-compose编排服务,应用的数据库主机需指向MySQL容器的服务名(而非localhost)。例如docker-compose中MySQL服务名为db,则应用配置的数据库主机应设为db。
4. 重置MySQL容器初始化数据
若使用官方MySQL镜像,需确认启动时已配置正确的环境变量:
services: db: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: passhere MYSQL_DATABASE: rboxlo volumes: - db_data:/var/lib/mysql
若之前容器已启动过,需删除旧数据卷重新初始化:
docker-compose down -v docker-compose up -d
内容的提问来源于stack exchange,提问作者gcriterium
相关产品推荐
相关产品推荐

