docker - 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
..
在部署定义中,但它不是一个有效的解决方案。
解决方案
推荐阅读
- c++ - 为什么这行得通?我无法理解这种交换的逻辑
- python - 如何在列表中重复一个整数 n,n 次(python)?
- python-3.x - Django 3.x Python 3.x - 如何解决内部服务器错误?
- javascript - 使用材料 ui 在反应中更新主题状态
- xamarin.forms - 如何在 Xamarin Forms 中打印图像?
- c - 为什么C标准库没有提供知道分配内存大小的功能?
- ios - Swift:使用枚举来表示扑克牌的等级
- python - 如何使用 selenium python 读取动态文本
- couchdb - 如果字段包含子字符串,如何选择文档
- networking - 使用 docker compose 在一个网络中使用动态 IP,在其他网络中使用静态 IP