Mac OS X下新建MySQL Docker容器后访问被拒绝问题求助
解决MySQL容器登录权限问题
1. 修正登录命令的密码格式
你当前使用的-p=root写法有误,MySQL的-p参数后直接跟密码时不需要等号,正确写法如下:
# 方式1:直接在命令行指定密码(会有安全提示) docker exec -it my_db mysql -uroot -proot # 方式2:交互式输入密码(更安全) docker exec -it my_db mysql -uroot -p # 执行后输入密码root即可
2. 处理MySQL8 root用户的认证插件限制
MySQL8默认对root@localhost采用auth_socket认证插件,而非密码认证,这会导致即使密码正确也无法登录。可以通过以下步骤修改:
- 停止并删除当前容器:
docker stop my_db docker rm my_db - 启动临时容器并跳过权限验证:
docker run -d --name my_db_temp -p 13306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=mydatabase -e MYSQL_USER=myuser -e MYSQL_PASSWORD=secret mysql:8 --skip-grant-tables --skip-networking - 进入临时容器的MySQL命令行:
docker exec -it my_db_temp mysql - 修改root用户的认证插件和密码:
USE mysql; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; FLUSH PRIVILEGES; exit; - 替换回正常容器:
docker stop my_db_temp docker rm my_db_temp docker run -d --name my_db -p 13306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=mydatabase -e MYSQL_USER=myuser -e MYSQL_PASSWORD=secret mysql:8 - 再次尝试登录即可成功。
3. 使用创建的myuser用户登录
如果root用户登录仍有问题,可尝试使用你创建的myuser用户,登录时需指定对应数据库:
docker exec -it my_db mysql -umyuser -psecret mydatabase
4. 检查容器初始化状态
若以上方法均无效,可查看容器日志确认初始化是否正常:
docker logs my_db
日志中若出现密码设置失败、数据库创建异常等信息,需重新创建容器。
内容的提问来源于stack exchange,提问作者sekelsenmat
相关产品推荐
相关产品推荐

