在 Podman 容器内使用 systemd-networkd

在 Podman 容器内使用 systemd-networkd

最终目标是在 Podman 容器内设置 macvlan 接口。我有以下 Dockerfile

FROM docker.io/library/debian:bookworm-slim
RUN apt-get --yes install systemd
RUN systemctl set-default multi-user.target
CMD ["/lib/systemd/systemd"]

如果我随后以特权模式(分离)运行它并将 shell 附加到正在运行的容器(以 root 身份),我可以macvlan1使用以下命令在默认 tap 接口上设置一个 macvlan 接口iproute2

# apt install iproute2
# ip link add macvlan1 link tap0 type macvlan mode bridge

但是,我想避免这种情况,我认为应该可以使用systemd-networkd,但我运气不太好。我尝试了以下.network.netdev文件(我已经测试过它们可以在我的主机上运行):

### 99-test.network
[Match]
Name=tap0

[Network]
MACVLAN=macvlan1
### 99-test.netdev
[Match]
# Empty

[NetDev]
Name=macvlan1
Kind=macvlan

[MACVLAN]
Mode=bridge

我像这样更新我的 Dockerfile:

FROM docker.io/library/debian:bookworm-slim
COPY 99-test.network /lib/systemd/network
COPY 99-test.netdev /lib/systemd/network
RUN apt-get --yes install systemd
RUN systemctl set-default multi-user.target
RUN systemctl enable systemd-networkd
CMD ["/lib/systemd/systemd"]

但是当我启动容器时,我看不到创建的 macvlan 接口。如果我查看输出,则systemctl status systemd-networkd没有日志或错误消息表明它试图读取.network.netdev文件。我唯一的线索是,当我networkctl在主机上运行时,它会将物理接口显示为列unmanaged中所示SETUP,而在容器中,它会将所有接口显示为pending(包括手动创建的 macvlan 接口)。

我尝试使用 Podman 中的 systemd 来实现这个功能吗?如果不行,原因何在?

相关内容