Docker jenkins ssh-agent "not running inside container" Ubuntu 22.04

Docker jenkins ssh-agent "not running inside container" on Ubuntu 22.04

既然 Ubuntu 22.04 已发布,我在我们的一个 jenkins-worker 上进行了全新安装以对其进行测试,但我无法让 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,build 20.10.12-0ubuntu4。

如有任何帮助,我们将不胜感激!

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

原来是cgroup v2的问题。似乎在使用 v2 时,当您创建容器时,默认情况下 cgroup 命名空间是私有的,在我的例子中是 Jenkins 代理,这导致容器 ID 在 /proc/self/cgroup.

中不可用

简单的解决方案是 运行 docker 容器 --cgroupns host 按照建议 。当我这样做时,Jenkins 可以再次检测到 运行ning 里面的容器。

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