最终目标是在 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 来实现这个功能吗?如果不行,原因何在?