VirtualBox地址与Docker容器地址不匹配的原因是什么?
为什么你的Docker应用访问IP从192.168.99.1变成了192.168.99.100?
嘿,这个问题我之前用Docker Toolbox的时候也踩过同款坑,本质是VirtualBox和Docker网络角色的混淆,给你掰扯清楚:
1. 两个IP的本质区别
192.168.99.1是你的物理主机在VirtualBox Host-Only网络中的IP地址——简单说就是你自己的电脑在这个专属虚拟网络里的身份标识。192.168.99.100是Docker自动创建的**VirtualBox虚拟机(Docker Machine)**的IP地址——这才是真正运行你容器的"宿主机器",所有容器的端口都是映射到这个虚拟机IP上的。
2. 为什么一开始能用192.168.99.1访问?
大概率是这两个原因之一:
- 当时你的容器端口映射是绑定到
0.0.0.0(默认配置),而且物理主机上对应的端口没有被其他程序占用。由于VirtualBox Host-Only网络是双向连通的,你通过物理主机IP也能"穿透"到虚拟机里的容器。 - 可能你当时误打误撞用对了端口,刚好物理主机的端口和虚拟机的端口转发规则匹配上了。
3. 修改/回滚后为什么失效?
- 重启容器时,可能端口映射的配置被意外修改(比如你更新镜像时调整了
docker run的端口参数),或者物理主机上的目标端口被其他进程占用了,导致通过物理主机IP的访问路径被阻断。 - 回滚镜像只是恢复了容器内的应用代码,但网络层面的问题(比如端口占用、虚拟机IP的默认规则)并没有被修复,所以还是无法通过
192.168.99.1访问。
4. Kitematic显示的才是正确地址
Kitematic作为Docker Toolbox的可视化工具,会直接读取Docker Machine的真实IP——也就是192.168.99.100,这才是你应该用来访问容器应用的标准地址。以后不管怎么重启容器或更新镜像,只要Docker Machine没被重建,这个IP基本不会变。
另外,你可以用命令 docker-machine ip default 直接查看Docker主机的IP,比ipconfig更准确哦~
内容的提问来源于stack exchange,提问作者aebabis
相关产品推荐
相关产品推荐

