繁体   English   中英

Docker jenkins ssh-agent“不在容器内运行”在 Ubuntu 22.04

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

现在 Ubuntu 22.04 已发布,我对我们的一位詹金斯工人进行了全新安装以对其进行测试,但我无法让 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 中也会发生同样的事情,所以原因可能在于升级的软件包之一

事实证明,这个问题毕竟与 cgroup v2 有关。 似乎在使用 v2 时,默认情况下,创建容器时 cgroup 命名空间是私有的,在我的情况下是 Jenkins 代理,这导致容器 ID 在/proc/self/cgroup中不可用。

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

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

如果 Jenkins 容器正在与 Docker Compose 一起运行,则无法按照其他答案中的建议提供--cgroupns host标志。 时至今日, Compose 规范中仍然缺少这一点。

但是,如果您可以控制运行 Jenkins 的 Docker 守护程序,则可以将Docker 守护程序配置中的default-cgroupns-mode标志设置为host 请注意,这将适用于主机上的所有容器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM