这让我抓狂。我正在尝试使用 Packer 和 VirtualBox 构建器(如果重要的话,在 macOS 上)从 ISO 构建 Debian 映像。此过程涉及 VM 从 Packer 提供的 HTTP 服务器下载 Debian 预置文件。
问题是,当我不触碰 Packer 创建的虚拟机的网络配置时,它通过 DHCP 获取配置并位于10.0.2.0
NAT 网络上,但它无法下载预置文件。使用preseed/interactive=true
启动参数调试安装过程并在预置文件下载之前进入 shell,可以重现此情况:网络已启动,其他一切都可访问,但10.0.2.2
(这是运行 Packager 的 HTTP 服务器的主机的 IP)无法访问:ping
并且wget
只是卡住并超时。然而,另一个在 VirtualBox 上运行的 Debian 客户机相同的网络,完全能够从 Packer 的服务器下载预种子!
natnetwork
我可以通过修改 Packer JSON 来修复预下载问题,为 VM设置另一个网络,如下所示:
"vboxmanage": [
[ "modifyvm", "{{.Name}}", "--nic1", "natnetwork" ]
]
现在,当运行 Packer 时,可以从客户机访问主机,下载预先安装的文件,然后继续进行 Debian 安装。然而安装完成后,无法从主机访问客户机,并且 Packer 无法建立 SSH 连接以继续配置。Packer 日志显示:
2023/03/22 11:33:17 packer-plugin-virtualbox_v1.0.4_x5.0_darwin_amd64 plugin: 2023/03/22 11:33:17 [DEBUG] TCP connection to SSH ip/port failed: dial tcp 127.0.0.1:4430: connect: connection refused
因此,基本上,要完成此运行,我必须在 Packer 运行过程中切换网络。这无疑与我对 VirtualBox 和网络的了解有限有关。也许有人能想出一个主意?
答案1
这是我遇到相同错误时的大致时间线。您的故障排除是正确的,我相信这是指向 VirtualBox 7 中的 NAT 网络。
在 Packer GitHub 上可以找到对潜在错误/解决方案的引用问题追踪 #12118
通过 Packer Build 模板中的 vboxmanage 行调整 nat 网络设置,此修复应该可以解决您的 NAT 可达性问题。
# Change to --nat-localhostreachable1 forced by
vboxmanage = [["modifyvm", "{{.Name}}", "--nat-localhostreachable1", "on"]]
答案2
过去几周我也遇到了类似的困境。这可能是毫无根据的猜测:https://github.com/artificialwisdomai/origin/pull/45#discussion_r1244125648。