Windows 10下Docker Toolbox中MariaDB容器无法被本地MySQL Workbench连接
解决Docker Toolbox下Windows主机无法连接容器内MariaDB的问题
这个问题的核心原因是Docker Toolbox的运行机制:它不像Docker Desktop那样直接在Windows内核中运行容器,而是通过VirtualBox创建了一个Linux虚拟机,所有Docker容器都运行在这个虚拟机内部。你当前的配置把端口绑定到了127.0.0.1,这个地址是虚拟机内部的回环地址,Windows主机无法直接访问——这就是为什么Ubuntu虚拟机(和Docker虚拟机处于同一网络环境)能正常连接,而Windows本地不行的原因。
下面是具体的解决步骤:
1. 获取Docker虚拟机的IP地址
Docker Toolbox默认会创建一个名为default的虚拟机,你可以通过以下方式获取它的IP:
- 打开Docker Quickstart Terminal,启动后终端顶部会显示类似
docker is configured to use the default machine with IP 192.168.99.100的提示,这个IP就是你需要的; - 或者在Git Bash(Docker Toolbox依赖的命令行环境)中运行命令:
docker-machine ip default - 也可以打开VirtualBox,选中
default虚拟机,查看「网络」设置里的网卡IP(一般是NAT模式下的对应IP)。
2. 修改docker-compose.yml的端口映射配置
把当前的端口绑定行:
ports: - "127.0.0.1:3306:3306"
修改为:
ports: - "0.0.0.0:3306:3306"
或者简化成:
ports: - "3306:3306"
这样配置会让容器的3306端口绑定到Docker虚拟机的所有网卡上,而非仅绑定虚拟机内部的回环地址,确保Windows主机能通过虚拟机IP访问到这个端口。
3. 重启容器使配置生效
在命令行中运行:
docker-compose down docker-compose up -d
4. 在Windows主机上使用虚拟机IP连接数据库
不管是MySQL Workbench还是Squirrel,连接时都要把主机地址改成刚才获取的Docker虚拟机IP(比如192.168.99.100),端口保持3306,用户名填root,密码使用你设置的pw,测试连接应该就能成功了。
你也可以先用telnet [虚拟机IP] 3306测试端口连通性,如果能正常连接,说明端口映射已经生效。
内容的提问来源于stack exchange,提问作者SNO




