我拥有的:
一台 Gentoo 主机和一个 Ubuntu 容器。
我想要的是:
将容器连接到网络和主机。
我在做什么:
我在主机上创建了一个桥并将我的网卡添加到其中。 NIC 的 IP 地址已移至网桥,我可以正常使用互联网。然后我用 启动我的容器systemd-nspawn --network-bridge=my-bridge ...
。
我得到什么:
在容器端,我看到host0
根据 networkctl 配置的接口:
root@scratch:~# networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 sit0 sit off unmanaged
3 host0 ether degraded configuring
如果我通过 Wireshard 嗅探三个接口(网桥、NIC 和 vb-container)的流量,我会看到 DHCP DISCOVER 通过网桥和 vb-container,但从未收到 NIC 和 ACK。
我在问什么
我缺少什么?如何获取分配给我的容器的 IP 地址?
答案1
如果您的图像/目录使用 systemd-networkd,这应该是开箱即用的。如果没有,您可能需要调整网络内部结构或尝试默认配置(-n、--network-bridge 等都没有),这只是为您的容器提供主机网络。您可能需要更新 resolv.conf 或 DNS,因为映像可能会覆盖主机。
就我而言,我正在使用 RHEL CentOS、Fedora 等。这些发行版使用开箱即用的 NetworkManager,因此最简单的方法是不在 systemd-nspawn 上指定网络。
另请注意,您可能需要启动到启用网络的目标。 systemd-nspawn 本身只会使用默认目标。
systemd-nspawn -b [opts] systemd multi-user.target
此示例通过使用提供的目标运行 systemd 来启动。如果我使用 single.target 或默认(graphical.target),我可能会得到混合的结果。