phpmyadmin docker容器无法访问mariadb数据库问题求助
Docker部署MariaDB+phpMyAdmin连接失败配置修正
问题复现命令
docker rm -f mariadb && docker run --detach --name mariadb --env MARIADB_USER=user --env MARIADB_PASSWORD=secret --env MARIADB_ROOT_PASSWORD=secret -p 3306:3306 mariadb:latest docker rm -f phpmyadd && docker run --name phpmyadd -d -e PMA_HOST=host -e PMA_PORT=3306 -p 8080:80 phpmyadmin docker exec -it mariadb bash
已确认现象
- 可正常登录mariadb容器,通过
mysql -uroot -psecret命令正常访问内部MariaDB服务 - 可通过http://localhost:8080正常打开phpMyAdmin页面
- phpMyAdmin登录MariaDB时提示连接失败,宿主机telnet 3306端口无法连通
核心配置问题
- phpMyAdmin数据库地址配置错误:当前
PMA_HOST参数填的是host,这个地址不存在,phpMyAdmin根本找不到数据库服务。Docker容器间通信不能随意填写主机名,需要使用数据库容器的可解析地址。 - 容器未加入同一互通网络:两个容器默认启动时会接入Docker默认bridge网络,该网络默认不支持容器名直接解析,且无额外连通配置的情况下两个容器无法直接互访。
- 端口连通性误判:MariaDB首次启动会执行数据初始化操作,耗时几秒到十几秒不等,刚执行完run命令就telnet 3306端口时,服务还没完成启动、未开始监听端口,自然会连通失败;如果等待1分钟以上还是不通,需要检查本地3306端口是否被其他已有服务占用,导致Docker端口映射失效。
修正后可直接运行的配置
- 先创建自定义桥接网络,支持容器名自动解析互访:
docker network create db-net - 启动MariaDB容器,加入自定义网络:
docker rm -f mariadb && docker run --detach --name mariadb --network db-net --env MARIADB_USER=user --env MARIADB_PASSWORD=secret --env MARIADB_ROOT_PASSWORD=secret -p 3306:3306 mariadb:latest
- 启动phpMyAdmin容器,加入同一网络,将
PMA_HOST修改为MariaDB的容器名mariadb:
docker rm -f phpmyadd && docker run --name phpmyadd -d --network db-net -e PMA_HOST=mariadb -e PMA_PORT=3306 -p 8080:80 phpmyadmin
执行完上述命令后等待10秒左右,待MariaDB初始化完成,再访问phpMyAdmin页面,输入数据库账号密码即可正常登录。
内容的提问来源于stack exchange,提问作者DevWL
相关产品推荐
相关产品推荐

