Docker链接phpMyAdmin与MySQL容器遇连接拒绝问题求助
我来帮你搞定这个头疼的问题!你遇到的mysqli_real_connect(): (HY000/2002): Connection refused报错,大多是由几个常见原因导致的,咱们一步步排查解决:
1. 先确认MySQL容器是否完全启动就绪
MySQL容器启动后需要一点时间初始化数据库和服务,如果你紧接着就启动phpMyAdmin,很可能MySQL还没准备好接受连接。
先查看MySQL容器的日志,确认它已经就绪:
docker logs mysql你要找日志里类似这样的内容:
mysqld: ready for connections.,出现这句话才说明MySQL可以正常接受连接了。如果还没就绪,耐心等1-2分钟再尝试登录;或者先停掉并删除phpMyAdmin容器,等MySQL就绪后再重新启动它:
docker stop myadmin && docker rm myadmin docker run --name myadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin
2. 显式指定phpMyAdmin的连接配置(避免默认值出错)
虽然用了--link mysql:db,但有时候需要明确告诉phpMyAdmin要连接的主机和端口,启动时加上这两个环境变量更稳妥:
docker run --name myadmin -d --link mysql:db -p 8080:80 \ -e PMA_HOST=db \ -e PMA_PORT=3306 \ phpmyadmin/phpmyadmin
这里PMA_HOST=db对应你--link里设置的别名db,MySQL默认端口是3306,这样能确保phpMyAdmin不会用错连接地址。
3. 检查MySQL容器的绑定地址设置
有时候MySQL默认只绑定127.0.0.1,导致容器之间无法互通。启动MySQL容器时加上--bind-address=0.0.0.0,让它监听所有网络地址:
docker stop mysql && docker rm mysql docker run --name mysql -e MYSQL_ROOT_PASSWORD=admin -d --bind-address=0.0.0.0 mysql
之后再重新启动phpMyAdmin容器,尝试连接。
4. 改用Docker自定义网络(替代老旧的--link,更稳定)
虽然你不想用docker-compose,但--link其实是Docker比较旧的特性,现在更推荐用自定义网络来实现容器间通信,这种方式更稳定,容器之间还能直接用容器名互相访问:
先创建一个自定义网络:
docker network create mysql-network启动MySQL容器并加入这个网络:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=admin -d --network mysql-network mysql启动phpMyAdmin容器并加入同一个网络,直接用容器名
mysql作为连接主机:docker run --name myadmin -d -p 8080:80 \ -e PMA_HOST=mysql \ --network mysql-network \ phpmyadmin/phpmyadmin
最后登录的小提醒
登录phpMyAdmin时,用户名填root,密码填你设置的admin,主机名不用手动修改(会自动用我们配置的db或mysql),直接提交就能正常连接了。
内容的提问来源于stack exchange,提问作者user2042383

