小编pin*_*een的帖子

使用 cgroupv2 (--cgroupns=private) 时,Systemd 无法在 docker 容器中运行

我将在下面附上最小化的测试用例。但是,它是一个简单的 Dockerfile,具有以下几行:

VOLUME ["/sys/fs/cgroup"]
CMD ["/lib/systemd/systemd"]
Run Code Online (Sandbox Code Playgroud)

它是基于 Debian:buster-slim 的映像,并在容器内运行 systemd。实际上,我曾经像这样运行容器:

$ docker run  --name any --tmpfs /run \
    --tmpfs /run/lock --tmpfs /tmp \
    -v /sys/fs/cgroup:/sys/fs/cgroup:ro -it image_name
Run Code Online (Sandbox Code Playgroud)

在我升级一堆主机 Linux 软件包之前,它曾经运行良好。主机内核/systemd 现在似乎默认 cgroup v2。之前是cgroup。它停止工作。但是,如果我提供内核选项以便主机使用 cgroup,则它会再次运行。

在不提供内核选项的情况下,修复是添加--cgroupns=hostdocker run除了/sys/fs/cgroup以读写方式安装(:rw代替:ro)之外。

我想避免强迫用户提供内核选项。尽管我远非专家,但强制为 docker 容器使用主机命名空间对我来说并不合适。

我试图理解为什么会发生这种情况,并弄清楚应该做什么。我的目标是在 docker 中运行 systemd,其中主机遵循 cgroup v2。

这是我看到的错误:

$ docker run --name any --tmpfs /run --tmpfs /run/lock --tmpfs /tmp \
    -v /sys/fs/cgroup:/sys/fs/cgroup:rw -it image_name
systemd 241 running in system mode. (+PAM +AUDIT …
Run Code Online (Sandbox Code Playgroud)

cgroup systemd docker

10
推荐指数
2
解决办法
2331
查看次数

标签 统计

cgroup ×1

docker ×1

systemd ×1