MySQL用户Host设为%仍无法远程连接Docker容器问题
Docker部署MySQL容器远程连接失败问题
远程连接Docker部署的MySQL容器时,即便将MySQL用户Host设为%,仍报错:
Error: Access denied for user 'root'@'172.28.0.1' (using passowrd: YES).
环境与已排查操作
- 使用HeidiSQL及MySQL库尝试连接
- 报错中的IP地址动态变化,无法固定添加到Host值中
- 运行环境:Windows 10 + Docker Desktop(4.24.2)
- my.cnf已配置
bind-address=0.0.0.0 - 尝试过不同端口映射(如
3366:3306) - Windows防火墙已开放Docker Desktop的公网及内网权限
容器内用户配置验证
通过Docker Desktop的Exec标签连接容器内MySQL,查询root用户Host配置:
mysql> select Host,User from user where User='root'; +-----------+------+ | Host | User | +-----------+------+ | % | root | | localhost | root | +-----------+------+ 2 rows in set (0.01 sec)
相关配置文件
docker-compose.yml
version: "3.2" services: mysql: container_name: mysql build: './mysql/' environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_ROOT_HOST: "%" TZ: "-03:00" networks: - frontend - backend ports: - "3306:3306" volumes: - "$MYSQL_DATA:/var/lib/mysql" networks: frontend: backend:
.env
MYSQL_ROOT_PASSWORD="root" MYSQL_DATA=C:/Users/me/Downloads/docker_files/mysql/data
mysql/Dockerfile
FROM mysql:8.0 COPY conf/my.cnf /etc/my.cnf
conf/my.cnf
[mysqld] skip-host-cache skip-name-resolve datadir=/var/lib/mysql socket=/var/run/mysqld/mysqld.sock secure-file-priv=/var/lib/mysql-files user=mysql bind-address=0.0.0.0 default-time-zone='-03:00' general_log = 1 general_log_file = /var/log/mysql/mysql.log #setting to 1 per recommendations, need to do this in Azure too. lower_case_table_names=1 pid-file=/var/run/mysqld/mysqld.pid [client] socket=/var/run/mysqld/mysqld.sock !includedir /etc/mysql/conf.d/
HeidiSQL连接界面

更新1
已通过Docker Desktop终端重置两个root用户密码,但仍出现访问被拒绝错误:
mysql> ALTER USER 'root'@'%' IDENTIFIED BY 'root'; Query OK, 0 rows affected (0.02 sec) mysql> alter user 'root'@'localhost' identified by 'root'; Query OK, 0 rows affected (0.02 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)
内容的提问来源于stack exchange,提问作者TechFanDan
相关产品推荐
相关产品推荐

