You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Nginx-PHP-MariaDB环境下PhpMyAdmin登录主机问题

问题原因与解决方案

一、错误原因

MySQL/MariaDB的用户是**「用户名+主机地址」**的绑定组合,权限完全依赖这个组合生效:

  • 你创建的test@localhost仅允许从MariaDB容器内部(localhost)登录,比如在容器终端执行mysql -u test -p时,客户端地址是容器自身的localhost,因此能正常登录。
  • PhpMyAdmin是独立的Docker容器,和MariaDB通过Docker虚拟网络通信,此时MariaDB接收到的客户端IP是PhpMyAdmin容器的实际IP(即192.168.0.4),但你并未创建test@192.168.0.4这个用户,因此触发Access denied权限错误。

二、能否切换为test@localhost登录?

不行。localhost在Docker环境中仅指代容器自身,PhpMyAdmin运行在独立容器内,无法以MariaDB容器内部的localhost身份连接数据库,跨容器连接必须通过容器IP或Docker服务名,因此无法让PhpMyAdmin以localhost作为客户端地址访问MariaDB。

三、解决方法

创建一个允许从任意主机(或指定Docker网络段)登录的test用户:

  1. 进入MariaDB容器终端:
docker exec -it <你的mariadb容器名称/ID> mysql -uroot -proot

(容器名称可通过docker ps查看,默认格式为项目目录名_mariadb_1)

  1. 创建允许从任意IP登录的用户(替换your_password为你的登录密码):
CREATE USER 'test'@'%' IDENTIFIED BY 'your_password';

(%表示允许从任意IP登录,若想限制仅Docker网络访问,可替换为你的Docker子网段,比如192.168.0.0/24)

  1. 赋予该用户my_db的全权限:
GRANT ALL PRIVILEGES ON my_db.* TO 'test'@'%';
  1. 刷新权限使配置立即生效:
FLUSH PRIVILEGES;

完成后用test用户和设置的密码登录PhpMyAdmin即可正常访问。

额外优化建议

  • 你的docker-compose.yml中,PhpMyAdmin的volumes挂载了./mysql:/var/lib/mysql,这会覆盖MariaDB容器的数据库数据目录,建议移除该行(MariaDB的数据应由自身容器管理,或挂载到独立的专属目录)。
  • PhpMyAdmin的PMA_HOSTS可仅保留mariadb(Docker内部服务名),因为localhost和127.0.0.1在PhpMyAdmin容器中指向自身,无法连接到MariaDB。

内容的提问来源于stack exchange,提问作者Bùi Nguyễn Hoàng Thọ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 15:31:10