Docker挂载数据卷后phpMyAdmin连接MySQL容器遇权限拒绝问题
解决MySQL容器挂载数据卷后phpMyAdmin登录被拒绝的问题
问题分析
挂载本地数据卷后出现Access denied for user 'root'@'172.18.0.3',核心原因有两个:
- 本地挂载的
%cd%\mysql目录中存在旧的MySQL数据文件,其中root用户的权限仅限制在localhost/127.0.0.1,未授权容器网络内的IP访问 - 首次挂载空目录初始化时,MySQL默认的root用户仅允许本地登录,无法跨容器网络访问
解决方案
方案1:清理旧数据重新初始化(最简单直接)
- 停止并删除现有容器:
docker stop some-mysql pma docker rm some-mysql pma - 删除本地挂载目录的所有内容(Windows命令提示符):
rmdir /s /q %cd%\mysql mkdir %cd%\mysql - 重新创建两个容器:
此时MySQL会重新初始化数据,自动适配容器网络环境给root用户授权跨容器访问权限。docker run --rm --name some-mysql --network mynet -e MYSQL_ROOT_PASSWORD=password -v %cd%\mysql:/var/lib/mysql -d mysql docker run -d --rm --name pma --network mynet -p 8080:80 -e PMA_HOST=some-mysql -e UPLOAD_LIMIT=128M phpmyadmin
方案2:手动授权root用户远程访问(保留现有数据)
如果不想删除现有数据,可进入MySQL容器修改用户权限:
- 进入MySQL容器的命令行:
docker exec -it some-mysql mysql -uroot -ppassword - 在MySQL控制台执行授权语句(二选一即可):
-- 允许root从任意IP登录(适配容器网络动态IP场景) GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; -- 仅允许指定IP登录(比如报错信息里的172.18.0.3) -- GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.18.0.3' IDENTIFIED BY 'password' WITH GRANT OPTION; - 刷新权限使设置生效:
FLUSH PRIVILEGES; - 退出MySQL控制台后,重启phpMyAdmin容器即可登录:
docker restart pma
内容的提问来源于stack exchange,提问作者Olivier Meunier
相关产品推荐
相关产品推荐

