Ubuntu 22.04 上的 Docker jenkins ssh-agent“未在容器内运行”

Seb*_*elm 3 jenkins cgroups docker

现在 Ubuntu 22.04 已经发布了,我在我们的一位 jenkins-workers 上进行了全新安装来测试它,但我无法让 docker ssh-agent 正常工作。它无法再识别它是否在容器内运行,因此每当启动使用 docker 的作业时,我都可以在控制台中看到“Jenkins-worker-X 似乎没有在容器内运行”,然后管道失败。

我从之前就知道jenkins使用cgroup信息来检测它是否在容器中运行,因此例如cat /proc/self/cgroup在容器中执行应该会产生以 结尾的行列表/docker/<container-id>,然后Jenkins使用该列表来检测容器。但是,一旦我安装了 Ubuntu 22.04,cgroup 信息就不再包含 ,这/docker/<container-id>会导致 jenkins 代理认为它在裸机上运行。

即使执行官方镜像也有同样的问题,即docker run jenkins/ssh-agent:jdk11最后docker exec <container-id> cat /proc/self/cgroup会得到一个在我的机器上没有容器哈希的列表。

我该如何解决这个问题?从 Ubuntu 21.10 到 22.04 是否发生了某些变化导致了此问题?是否需要一些额外的配置?

我正在运行最新的 Ubuntu 22.04 (5.15.0-27-generic)、Docker 版本 20.10.12、内部版本 20.10.12-0ubuntu4。

任何帮助,将不胜感激!

编辑:我现在意识到,如果将所有软件包升级到最新版本(并使用最新的 jenkins/ssh-agent 映像),21.10 中也会发生同样的情况,因此原因可能出在升级的软件包之一中

Seb*_*elm 6

事实证明,问题毕竟与cgroup v2有关。看来,当使用 v2 时,创建容器时,cgroup 命名空间默认是私有的,在我的例子中是 Jenkins 代理,这导致容器 id 在/proc/self/cgroup.

简单的解决方案是按照此处另一个问题中的--cgroupns host建议运行 docker 容器。当我这样做时,詹金斯可以再次检测到它在其中运行的容器。

正如我发布问题一样,Ubuntu 21.10 切换到 cgroup v2 的更新可能已发布,因为我稍后也可以在那里重现该问题。