phpMyAdmin容器必须连接外部MySQL/MariaDB实例才能运行;需通过自定义Docker网络并设PMA_HOST为DB容器名,MySQL 8.0+还需指定MYSQL_DEFAULT_AUTHENTICATION_PLUGIN=mysql_native_password以确保兼容。

直接用 docker run 启动 phpMyAdmin 容器最省事,但必须让它能连上已有的 MySQL 容器——关键不是“能不能跑”,而是“怎么连上你的 MySQL”。
phpMyAdmin 必须通过 --link 或自定义网络访问 MySQL
旧式 --link 方式(如 --link mysql56:db)仍可用,但只在默认 bridge 网络下生效,且已标记为 legacy;更稳妥的是让所有容器加入同一个自定义网络:
- 先创建网络:
docker network create lnmp-net - 启动 MySQL 时指定网络:
docker run --network lnmp-net --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0 - 启动 phpMyAdmin 时也进同一网络:
docker run --network lnmp-net -p 8081:80 -e PMA_HOST=mysql -d phpmyadmin/phpmyadmin
PMA_HOST 是 phpMyAdmin 容器内用来解析 MySQL 地址的环境变量,值必须和 --name 启动的 MySQL 容器名一致(这里是 mysql),不能写 localhost 或 IP。
连接失败常见错误:mysqli_real_connect(): (HY000/2002)
这个错误几乎全是网络或 DNS 解析问题,不是密码错:
- 检查
docker ps确认两个容器都在lnmp-net中(docker inspect)| grep NetworkMode - 进 phpMyAdmin 容器手动测试:
docker exec -it,不通就说明网络没对上ping mysql - MySQL 容器若用了
--ip固定地址,必须确保该 IP 在自定义网络子网范围内,否则ping通但mysql -h mysql -u root -p仍可能拒绝连接(8.0 默认 require_secure_transport)
PHP 扩展缺失导致界面白屏或报错 extension mysqli not loaded
官方 phpmyadmin/phpmyadmin 镜像基于 Alpine,自带 mysqli 和 pdo_mysql,但如果你用的是自己构建的 PHP-FPM 容器并挂载了 phpMyAdmin 到 Nginx 下,那就另当别论——此时 phpMyAdmin 运行依赖的是你自己的 PHP 环境。
- 确认扩展已启用:
docker execphp -m | grep -E 'mysqli|pdo_mysql' - 若缺失,进容器执行:
docker-php-ext-install mysqli pdo_mysql,然后重启 PHP 容器 - 注意:Alpine 镜像需先装依赖:
apk add --no-cache $PHPIZE_DEPS mariadb-client
登录页提示 #2002 cannot log in to the MySQL server
这通常意味着 phpMyAdmin 能解析到 mysql 这个主机名,但 MySQL 拒绝了连接请求。重点查三处:
- MySQL 是否允许远程连接:默认
root@localhost不接受root@172.x.x.x连接,启动时加-e MYSQL_ROOT_HOST=%(仅测试环境) - MySQL 8.0+ 默认认证插件是
caching_sha2_password,phpMyAdmin 旧版不兼容,启动时加-e MYSQL_DEFAULT_AUTHENTICATION_PLUGIN=mysql_native_password - phpMyAdmin 的
PMA_USER/PMA_PASSWORD若显式设置,必须与 MySQL 实际账号匹配;不设则走登录页手动输,更灵活
真正卡住的地方往往不是配置写法,而是容器间网络命名解析是否生效、MySQL 认证插件是否兼容、以及 root 用户的 host 限制——这三个点漏掉任何一个,都会卡在“连得上但登不了”的状态。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











