pma_hosts不是phpmyadmin的合法配置项,根本不会被解析或生效;它既非官方支持的docker环境变量,也非config.inc.php中的有效键名,正确方式是手动编辑config.inc.php添加多个$cfg['servers']配置。
pma_hosts 不是 phpmyadmin 的合法配置项,它根本不会被解析或生效。你看到的 pma_hosts 很可能是误传、拼写错误,或是把 docker 环境变量和 phpmyadmin 配置混用了。
PMA_HOST 和 PMA_HOSTS 的区别在哪?
-
PMA_HOST是官方支持的 Docker 环境变量,用于设置单个 MySQL 主机地址(如host.docker.internal或192.168.1.100),phpMyAdmin 启动时会读取它并生成对应$cfg['Servers'][1]。 -
PMA_HOSTS不存在于任何 phpMyAdmin 版本的文档或源码中,既不是环境变量,也不是 config.inc.php 中的有效键名。设了也白设,Docker 容器启动后查print_r($cfg['Servers'])就会发现它完全没被加载。
常见错误现象:
- 写了
PMA_HOSTS=172.18.0.2,172.18.0.3,结果 phpMyAdmin 只连第一个、第二个根本不出现 - 以为能自动轮询或负载均衡——实际连解析都没过
如何真正配置多个 MySQL 容器主机?
phpMyAdmin 本身不支持“环境变量批量定义多服务器”,必须手动编辑 config.inc.php:
- 进入容器:
docker exec -it your-phpmyadmin-container /bin/sh - 编辑配置文件:
/www/phpmyadmin/config.inc.php(路径依镜像而异,常见于 Alpine 镜像) - 在
/<em> Servers configuration </em>/区域追加:
$i++; $cfg['Servers'][$i]['host'] = '172.18.0.2'; $cfg['Servers'][$i]['port'] = '3306'; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $i++; $cfg['Servers'][$i]['host'] = '172.18.0.3'; $cfg['Servers'][$i]['port'] = '3307'; $cfg['Servers'][$i]['auth_type'] = 'cookie';
注意:
- 每个
$cfg['Servers'][$i]必须有唯一$i(不能重复) -
host值不能写localhost——在容器里它指向自己,不是目标 MySQL 容器 - 若目标 MySQL 容器也跑在 Docker 中,推荐用自定义 bridge 网络 + 容器名(如
mysql-main),前提是两个容器在同一个网络下且 DNS 可解析
为什么改了 PMA_HOSTS 还连不上?
根本原因不是语法错,而是:
- 你试图绕过 phpMyAdmin 的配置机制,但底层代码根本不处理这个变量
- 真正起作用的是
PMA_HOST+PMA_PORT+PMA_USER等有限几个环境变量,仅用于单服务器快捷配置 - 多服务器场景下,环境变量无法表达结构化数据(比如端口、认证方式、SSL 开关等差异),硬编码进
config.inc.php是唯一可靠方式
复杂点在于:不同 MySQL 容器可能用不同认证插件(caching_sha2_password vs mysql_native_password)、不同 bind-address、甚至不同 socket 路径——这些都无法靠一个字符串列表统一解决。别省那几行代码,老老实实配 config.inc.php。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











