Debian11升级后Docker容器内/proc/self/cgroup无Docker信息导致Jenkins异常
我近期将系统从Debian 10 (Buster)升级到Debian 11 (Bullseye)后,部署在Docker内的Jenkins服务无法正常工作,问题根源是Jenkins会通过检查/proc/self/cgroup文件判断自身是否运行在Docker容器中。
正常情况下,Docker容器内的/proc/self/cgroup内容示例如下:
12:rdma:/ 11:perf_event:/docker/a2ffe0e97ac22657a2a023ad628e9df837c38a03b1ebc904d3f6d644eb1a1a81 10:freezer:/docker/a2ffe0e97ac22657a2a023ad628e9df837c38a03b1ebc904d3f6d644eb1a1a81 9:memory:/docker/a2ffe0e97ac22657a2a023ad628e9df837c38a03b1ebc904d3f6d644eb1a1a81 8:cpuset:/docker/a2ffe0e97ac22657a2a023ad628e9df837c38a03b1ebc904d3f6d644eb1a1a81 7:devices:/docker/a2ffe0e97ac22657a2a023ad628e9df837c38a03b1ebc904d3f6d644eb1a1a81 6:net_cls,net_prio:/docker/a2ffe0e97ac22657a2a023ad628e9df837c38a03b1ebc904d3f6d644eb1a1a81 5:hugetlb:/docker/a2ffe0e97ac22657a2a023ad628e9df837c38a03b1ebc904d3f6d644eb1a1a81 4:pids:/docker/a2ffe0e97ac22657a2a023ad628e9df837c38a03b1ebc904d3f6d644eb1a1a81 3:cpu,cpuacct:/docker/a2ffe0e97ac22657a2a023ad628e9df837c38a03b1ebc904d3f6d644eb1a1a81 2:blkio:/docker/a2ffe0e97ac22657a2a023ad628e9df837c38a03b1ebc904d3f6d644eb1a1a81 1:name=systemd:/docker/a2ffe0e97ac22657a2a023ad628e9df837c38a03b1ebc904d3f6d644eb1a1a81 0::/system.slice/containerd.service
但升级到Debian 11后,该文件内容仅余一行:
0::/
因此Jenkins无法识别自身运行在Docker容器内,会使用错误参数启动构建容器。
问题咨询
首先需要确认该情况是否属于Bug?排查后未找到同类问题,怀疑是自身配置错误:已重装Docker、清空所有配置,甚至尝试降级Docker到Debian10下正常运行的20.10.6版本,问题仍未解决。
花费一天时间才定位到问题根源不是Jenkins本身,目前没有进一步排查思路,需要解决方案或排查方向。
Jenkins相关逻辑说明
Jenkins侧的容器判断逻辑位于docker-workflow插件的源码中。
当Jenkins判定自身未运行在容器内时,会输出如下日志:
Jenkins does not seem to be running inside a container $ docker run -t -d -u 0:0 -w /var/jenkins_home/workspace/myrepo_master -v /var/jenkins_home/workspace/myrepo_master:/var/jenkins_home/workspace/myrepo_master:rw,z -v /var/jenkins_home/workspace/myrepo_master@tmp:/var/jenkins_home/workspace/myrepo_master@tmp:rw,z -e ******** ... my-awesome-build-container cat
此时它会挂载宿主机的/var/jenkins_home路径,而容器内的Jenkins没有该路径的访问权限。而在Debian10(及Ubuntu 20.04)环境下的正常日志如下:
Jenkins seems to be running inside container 7814083762a1bed51dec2f468c6ee07c978a0b6377e347c3ed7dc23393feac11 $ docker run -t -d -u 0:0 -w /var/jenkins_home/workspace/myrepo_master --volumes-from 7814083762a1bed51dec2f468c6ee07c978a0b6377e347c3ed7dc23393feac11 -e ******** ... my-awesome-build-container cat
正常场景下Jenkins会通过--volumes-from参数为构建容器挂载正确的卷。
补充说明:该问题已在Jenkins docker-workflow插件版本528.v7c193a_0b_e67c中修复。
内容的提问来源于stack exchange,提问作者Simon Oelerich

