Windows10下Docker Toolbox部署MongoDB后本地Compass及Web应用无法连接
我之前也碰到过完全一样的情况,Docker Toolbox在Windows 10上的网络逻辑和原生Docker Desktop差异很大,核心问题基本都出在网络地址和端口映射上,一步步来排查:
第一步:确认容器的端口映射是否配置正确
启动MongoDB容器时必须添加端口映射参数,把容器内的27017端口映射到虚拟机端口。如果启动命令没加-p 27017:27017,外部根本没法访问。
先运行docker ps查看容器状态,看PORTS列是否显示0.0.0.0:27017->27017/tcp(或类似的端口映射)。如果没有,需要重新启动容器:docker stop taxlien docker rm taxlien docker run -d -p 27017:27017 --name taxlien mongo第二步:获取Docker Toolbox虚拟机的IP地址
Docker Toolbox是运行在VirtualBox的Linux虚拟机里的,本地Windows环境不能直接用localhost或127.0.0.1连接,得用虚拟机的实际IP。
打开Docker Quickstart Terminal,里面会直接显示虚拟机IP(通常是192.168.99.100),或者直接运行命令获取:docker-machine ip default记好这个IP,后面连接要用到。
第三步:用正确地址配置MongoDB Compass/Web应用
别再用localhost:27017连接了,换成刚才拿到的虚拟机IP:- Compass的连接字符串填:
mongodb://192.168.99.100:27017(如果设置了账号密码,就改成mongodb://用户名:密码@192.168.99.100:27017) - Web应用里的数据库连接地址也替换成这个IP,而不是localhost
- Compass的连接字符串填:
第四步:检查VirtualBox的端口转发规则(可选)
如果上面的步骤还是不行,手动去VirtualBox确认端口转发设置:- 打开VirtualBox,找到名为
default的虚拟机 - 右键选择「设置」→「网络」→「高级」→「端口转发」
- 添加一条规则:主机端口填27017,子系统端口填27017,协议选TCP,主机IP和子系统IP留空即可
- 打开VirtualBox,找到名为
第五步:确认MongoDB允许远程连接
容器里的MongoDB默认允许所有IP访问,但如果自定义过配置文件,得检查bindIp设置:- 进入容器:
docker exec -it taxlien bash - 查看配置:
cat /etc/mongod.conf | grep bindIp - 如果输出是
bindIp: 127.0.0.1,说明只允许容器内部访问,需要改成bindIp: 0.0.0.0,然后重启容器:docker restart taxlien
- 进入容器:
按上面的步骤操作,基本就能解决连接问题了。
内容的提问来源于stack exchange,提问作者Ajay Jirati

