如何从Windows 7访问VirtualBox中Ubuntu Docker容器内的Jfrog Artifactory?
我来帮你搞定这个访问问题!你遇到的情况很典型——Docker容器的内部IP(172.17.0.2)属于Docker桥接网络的私有网段,只能在它的宿主机(也就是你的Ubuntu 16系统)内部访问,Windows系统不在这个网络范围内,所以直接连不通。下面给你几个可行的解决方案,按操作复杂度从低到高排序:
方案1:Docker端口映射(最推荐)
核心思路是把Docker容器的8081端口映射到Ubuntu宿主机的端口上,让Windows通过Ubuntu的IP间接访问容器服务。
- 先停止当前运行的Artifactory容器(如果它正在运行):
docker stop <容器ID或容器名称> - 重新启动容器时添加端口映射参数,将容器的8081端口映射到Ubuntu宿主机的8081端口(也可以选其他未被占用的端口):
如果是之前创建的容器,你可以先用docker run -d -p 8081:8081 <你的Artifactory镜像名称>docker commit保存当前容器为镜像,再用上面的命令重新运行;或者直接创建新容器替换旧的。 - 在Ubuntu终端里确认端口已经成功监听:
输出里应该能看到netstat -tulpn | grep 80810.0.0.0:8081的监听记录,说明端口已经对外开放。 - 找到Ubuntu虚拟机在VirtualBox网络中的IP:在Ubuntu终端输入
ifconfig(或ip addr),找到和Windows同网段的IP地址(一般是192.168.x.x格式,对应VirtualBox的桥接或NAT网络)。 - 最后在Windows的浏览器里输入
http://<Ubuntu的IP地址>:8081,就能正常访问Artifactory服务了。
方案2:VirtualBox端口转发(适配NAT网络模式)
如果你的Ubuntu虚拟机用的是NAT网络模式(无法直接从Windows访问Ubuntu的IP),可以给VirtualBox添加端口转发规则,把Windows本地的端口转发到Ubuntu的端口上,再结合方案1的Docker端口映射。
- 先按方案1完成Docker容器到Ubuntu宿主机的端口映射。
- 关闭Ubuntu虚拟机,打开VirtualBox的「设置」→「网络」→「网卡1」→「高级」→「端口转发」。
- 添加一条规则:名称随便填,协议选TCP,主机端口填8081,子系统端口填8081,子系统IP填Ubuntu在NAT模式下的内部IP(一般是10.0.2.15,可以在Ubuntu里用
ifconfig查看)。 - 启动Ubuntu虚拟机后,在Windows浏览器里输入
http://localhost:8081或http://127.0.0.1:8081就能访问Artifactory了。
方案3:Docker Host网络模式(不推荐)
这个方案让Docker容器直接使用Ubuntu宿主机的网络栈,容器的端口会直接暴露在Ubuntu的网络中,不需要额外映射。但缺点是容器会和宿主机共享端口资源,容易引发端口冲突,所以仅作为备选方案。
- 停止当前运行的Artifactory容器:
docker stop <容器ID或容器名称> - 用Host网络模式重新启动容器:
docker run -d --network host <你的Artifactory镜像名称> - 找到Ubuntu的IP地址后,在Windows浏览器里输入
http://<Ubuntu的IP地址>:8081即可访问。
额外注意事项
- 检查Ubuntu防火墙:Ubuntu 16默认使用ufw防火墙,确保8081端口已开放,执行命令:
如果之前没开启防火墙,可以忽略这一步。sudo ufw allow 8081 - 测试连通性:在Windows里先ping一下Ubuntu的IP,能ping通再尝试访问端口;如果ping不通,先排查VirtualBox的网络模式配置是否正确。
内容的提问来源于stack exchange,提问作者kunal
相关产品推荐
相关产品推荐

