首页 > 解决方案 > Kubernetes 集群中的 Docker 内的 Docker

问题描述

我正在尝试在裸机上的 Kubernetes 集群中运行 Jenkins pod。

我试图在 docker 中实现 docker,因为我需要在管道中构建 Docker 映像,因此我将 /var/run/docker.sock 作为卷安装到容器中。我面临的问题是,每次在 Jenkins 管道中运行 docker 命令时,我都会收到权限被拒绝错误。

我检查/var/run/docker.sock了节点上的所有权

srw-rw---- 1 root docker 0 Apr 10 19:47 /var/run/docker.sock

然后我在正在运行的容器中检查了它:

srw-rw---- 1 root 116 0 Apr 10 21:33 /var/run/docker.sock

现在我有点困惑。为什么我看到身份证?我检查了docker主机上组的 groupID。正好是 116。我猜逻辑假设是容器内的所有权与主机上的所有权完全相同。尽管主机上的 docker 组没有被视为容器内的 docker 组。这是正确的假设吗?那么问题来了:我做错了什么?

我的 Jenkins Dockerfile 如下所示

FROM jenkins/jenkins:2.230-jdk11
....
UN apt-get update -qq  && apt-get install -y docker-ce docker-ce-cli containerd.io

#The following 3 commands I tried to fix the issue, but it did not help
RUN touch /var/run/docker.sock
RUN chown jenkins:docker /var/run/docker.sock
RUN usermod -aG docker jenkins

USER jenkins

我假设这些组可以是 - 以某种方式在主机和来宾操作系统之间映射(不确定它是否以这种方式工作(是吗?))或者 - 应该将 jenkins 用户添加到主机操作系统上的 docker 组,但我没有找到如何。可能可以按照此处的建议使用 pod start 上的命令来完成,但是我必须以有权这样做的用户身份运行 pod,这可能不是最好的主意。或者是其他东西

请告知,让这个工作的建议方法是什么。

谢谢

PS这个问题可以通过

  securityContext:
    ..
    runAsGroup: 116
    ..

在部署定义中,但它不是一个有效的解决方案。

标签: dockerkuberneteschown

解决方案


推荐阅读