You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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可能无法覆盖默认配置,推荐使用自定义配置文件挂载的方式指定端口:

  1. 创建my-db2.cnf文件:
[mysqld]
port=3307
bind-address=0.0.0.0
  1. 重新启动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端口是否可访问:

  1. 获取WSL2的IP:wsl hostname -I
  2. 执行telnet测试:telnet <WSL2_IP> 3307
    若不通,检查Docker端口映射是否正确,或WSL2的网络防火墙规则。

内容的提问来源于stack exchange,提问作者MD BILLAL HOSSAIN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 04:54:53