Docker(WSL2)部署双MariaDB实例后phpMyAdmin连接DB2失败求助
问题:WSL2 Docker环境下MariaDB实例2无法被phpMyAdmin访问
环境与操作背景
使用Windows平台WSL2上的Docker Desktop 4.16.0,通过批处理文件创建两个MariaDB实例及对应phpMyAdmin容器,命令如下:
::create the volume docker volume create vol1-db-vol docker volume create vol2-db-vol ::create the network ::docker network create Network1 ::Run Database script 1: docker run --network Network1 -p 127.0.0.1:3306:3306 -v vol1-db-vol:/var/lib/mysql --name DB1 -e MYSQL_ROOT_PASSWORD=dbadmin -d mariadb:focal docker run --network Network1 --name myadmin1 -d --link DB1:db -p 8080:80 phpmyadmin ::Run Database script 2: docker run --network Network1 --env="MYSQL_UNIX_PORT=3307" --env="MYSQL_TCP_PORT=3307" -p 127.0.0.1:3307:3307 -v vol2-db-vol:/var/lib/mysql --name DB2 -e MYSQL_ROOT_PASSWORD=dbadmin -d mariadb:focal docker run --network Network1 --name myadmin2 -e PMA_HOST=172.17.0.1 -e PMA_PORT=3307 -d --link DB2:db -p 8081:80 phpmyadmin
问题现象
DB1可通过http://localhost:8080/正常访问,但访问http://localhost:8081/以root用户连接DB2时,报错:
mysqli::real_connect(): (HY000/2002): Connection refused
容器状态日志
- DB2容器运行日志:
2024-02-23 19:54:15 Version: '10.7.3-MariaDB-1:10.7.3+maria~focal' socket: '/run/mysqld/mysqld.sock' port: 3307 mariadb.org binary distribution
- myadmin2容器访问日志:
2024-02-23 21:05:53 172.18.0.1 - - [24/Feb/2024:03:05:53 +0000] "GET /index.php?route=/ HTTP/1.1" 200 5875 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36" 2024-02-23 21:05:55 172.18.0.1 - - [24/Feb/2024:03:05:55 +0000] "POST /index.php?route=/ HTTP/1.1" 200 6053 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36" 2024-02-23 21:06:07 172.18.0.1 - - [24/Feb/2024:03:06:07 +0000] "POST /index.php?route=/ HTTP/1.1" 200 6056 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
已排查动作
查阅多个同类问题帖子,但均为其他平台场景,未解决当前问题。
解决方案与调试步骤
1. 修正phpMyAdmin的连接配置
当前myadmin2使用PMA_HOST=172.17.0.1(Docker默认网桥IP),但容器均在自定义Network1网络内,直接使用容器名DB2即可实现网络内解析。修改myadmin2启动命令:
docker run --network Network1 --name myadmin2 -e PMA_HOST=DB2 -e PMA_PORT=3307 -d -p 8081:80 phpmyadmin
注:--link为Docker旧版特性,同一自定义网络下无需依赖该参数,可直接删除。
2. 确保MariaDB端口配置生效
环境变量MYSQL_TCP_PORT可能无法覆盖默认配置,推荐使用自定义配置文件挂载的方式指定端口:
- 创建
my-db2.cnf文件:
[mysqld] port=3307 bind-address=0.0.0.0
- 重新启动DB2容器:
docker stop DB2 && docker rm DB2 docker run --network Network1 -p 127.0.0.1:3307:3307 -v ./my-db2.cnf:/etc/mysql/conf.d/my.cnf -v vol2-db-vol:/var/lib/mysql --name DB2 -e MYSQL_ROOT_PASSWORD=dbadmin -d mariadb:focal
3. 验证容器间网络连通性
进入myadmin2容器,测试与DB2的网络连通:
# 解析容器名 docker exec -it myadmin2 ping DB2 # 测试端口连通 docker exec -it myadmin2 telnet DB2 3307
若telnet失败,说明DB2的3307端口未对外开放,需检查MariaDB配置是否正确绑定0.0.0.0(允许所有IP访问)。
4. 检查WSL2端口转发
从Windows主机测试WSL2的3307端口是否可访问:
- 获取WSL2的IP:
wsl hostname -I - 执行telnet测试:
telnet <WSL2_IP> 3307
若不通,检查Docker端口映射是否正确,或WSL2的网络防火墙规则。
内容的提问来源于stack exchange,提问作者MD BILLAL HOSSAIN
相关产品推荐
相关产品推荐

