phpmyadmin连不上docker mysql主因是网络定位错误:同网络填容器名(如db),宿主机访问填127.0.0.1;须配bind-address=0.0.0.0、用户权限允许%、mysql 8.0需指定mysql_native_password插件。
phpmyadmin连不上docker里的mysql:先确认容器网络模式
默认用 docker run -p 3306:3306 启动mysql容器时,宿主机能通过 127.0.0.1:3306 访问,但phpmyadmin(尤其在docker里运行)不能直接填 localhost —— 它的“localhost”指向自己容器内部,不是宿主机或mysql容器。
- 如果phpMyAdmin和MySQL在同一个
docker network里(推荐),MySQL容器名可直接当主机名用,比如mysql - 如果phpMyAdmin在宿主机上(如XAMPP集成版),而MySQL在Docker中,就该填宿主机的真实IP(不是
127.0.0.1,除非MySQL暴露了端口且防火墙放行) -
host网络模式虽能用host.docker.internal(仅Mac/Windows Docker Desktop),但Linux需手动加--add-host=host.docker.internal:host-gateway
phpMyAdmin配置里填什么host:看它在哪跑
关键不是“怎么连”,而是“谁在连谁”。phpMyAdmin的 $cfg['Servers'][$i]['host'] 值必须对准MySQL容器在网络中的可达地址。
- 两者同网桥(如自建
myapp_net):填MySQL容器名,例如mysql(前提是docker run --network myapp_net --name mysql ...) - phpMyAdmin在宿主机,MySQL容器映射了
-p 3306:3306:填127.0.0.1(注意MySQL用户权限要允许root@'127.0.0.1'或root@'%') - MySQL容器没开
bind-address = 0.0.0.0或跳过DNS解析(skip-name-resolve没开),会导致连接超时或卡在反向解析
常见报错对应的真实原因
看到错误别急着改phpMyAdmin,先查MySQL容器日志和连接路径:
-
mysqli::real_connect(): (HY000/2002): Connection refused→ MySQL没监听外部连接(检查bind-address和skip-networking)、端口没映射、容器根本没起来 -
Access denied for user 'root'@'172.18.0.3'→ 用户权限只给了localhost,没给容器IP段;用CREATE USER 'root'@'%' IDENTIFIED BY 'xxx'; GRANT ALL ON *.* TO 'root'@'%'; FLUSH PRIVILEGES; - 空白页或500错误,但MySQL日志没记录 → phpMyAdmin配置里host写成了
localhost,而它在容器里找不到本地MySQL服务
Docker Compose下最稳的写法
用 docker-compose.yml 统一管理网络,避免手敲参数漏掉关键项:
version: '3.8'
services:
db:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password --bind-address=0.0.0.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
ports:
- "3306:3306"
networks:
- appnet
<p>phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: db # ← 关键:填db服务名,不是localhost
PMA_PORT: 3306
ports:</p>
- "8080:80" networks:
- appnet
这里
PMA_HOST: db能工作,是因为Docker Compose自动为每个service创建DNS记录,db就是MySQL容器在appnet网络里的主机名。别信“localhost能通”的经验,容器间通信不走宿主机回环。复杂点在于MySQL 8.0默认用
caching_sha2_password插件,phpMyAdmin旧版不兼容——必须显式加--default-authentication-plugin=mysql_native_password,否则连上也报认证失败。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











