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

如何让Win7主机访问VirtualBox虚拟机中Docker容器的GitLab?

我来帮你一步步排查解决这个问题,我之前在VirtualBox里折腾Docker服务的时候也碰到过类似的网络坑,咱们从几个核心点入手:

1. 先搞清楚VirtualBox的网络类型和端口转发逻辑

你提到有一个VirtualBox仅主机网络IP能ping通,那咱们先分两种情况处理:

  • 如果用仅主机网络:这种网络模式下主机和虚拟机是直接互通的,根本不需要端口转发!你直接在Windows主机的浏览器里输入那个能ping通的虚拟机IP(比如http://192.168.56.101),应该就能访问GitLab了。
  • 如果想用NAT网络+端口转发:那得先确认你的虚拟机网络配置是NAT(不是仅主机),然后按下面步骤设置:
    1. 打开VirtualBox,选中你的Ubuntu虚拟机 → 右键「设置」→「网络」
    2. 切换到「NAT」标签,点击「高级」→「端口转发」
    3. 添加一条规则:
      • 名称:GitLab
      • 协议:TCP
      • 主机端口:选一个没被占用的,比如8080(避免和Windows主机本身的80端口冲突)
      • 子系统端口:80(因为GitLab容器映射到虚拟机的80端口)
      • 主机IP:留空或者填0.0.0.0(表示监听主机所有IP)
      • 子系统IP:填虚拟机的内部IP(可以在Ubuntu里用ip a查看,比如10.0.2.15这类NAT分配的IP)
2. 检查Ubuntu虚拟机的防火墙和Docker端口映射
  • 先确认虚拟机的防火墙没挡住80端口:
    执行sudo ufw status,如果显示active,就运行sudo ufw allow 80/tcp,然后sudo ufw reload开放80端口的入站流量。
  • 再确认Docker容器的端口绑定是对的:
    执行docker ps,看GitLab容器的端口列是不是0.0.0.0:80->80/tcp或者:::80->80/tcp——这表示容器的80端口绑定到了虚拟机的所有IP上,而不是只绑定localhost(如果是127.0.0.1:80->80/tcp的话,那只有虚拟机自己能访问,外部连不上)。
3. 排查Windows主机的防火墙和端口占用
  • 打开Windows Defender防火墙,检查是否有阻止你用的主机端口(比如8080)的规则,需要添加一条「允许应用或功能通过Windows Defender防火墙」的规则,允许该端口的TCP入站流量。
  • 用命令检查端口是否被占用:
    按Win+R输入cmd,运行netstat -ano | findstr :8080(把8080换成你用的主机端口),如果有结果,说明端口被其他程序占了,换个端口就行(比如8081)。
4. 最后测试访问的正确姿势
  • 如果用仅主机网络:直接访问http://[能ping通的虚拟机仅主机IP]
  • 如果用NAT端口转发:在主机浏览器里访问http://localhost:[你设置的主机端口]或者http://[Windows主机的仅主机IP]:[主机端口]

要是还是不行,你可以在虚拟机里用curl -v http://0.0.0.0:80确认GitLab确实在监听所有IP,然后在主机上用telnet [虚拟机仅主机IP] 80测试端口连通性,看看是不是能建立连接。

内容的提问来源于stack exchange,提问作者Dschoni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:50:25