jenkins - AKS 中的 Docker-in-Docker
问题描述
我们的任务是设置基于容器的 Jenkins 部署,在 AKS 中执行此操作的压力很大。我们的 Jenkins 需要能够构建其他容器。通常我会通过将 /var/run/docker.sock 和 /usr/bin/docker 安装到我正在运行的容器中来使用 docker-in-docker 方法来处理这个问题。
我不知道这在 AKS 中是否可行。GitHub 上的一些论坛帖子表明主机安装是可能的,但在最新的 AKS 版本中被破坏。我对 Helm 图表的有限实验遇到了这个错误:
Error: release jenkins4 failed: Deployment.apps "jenkins" is invalid:
[spec.template.spec.initContainers[0].volumeMounts[0].name: Required
value, spec.template.spec.initContainers[0].volumeMounts[0].name: Not
found: ""]
我所做的更改是更新volumeMounts:
jenkins-master-deployment.yaml 部分并包括以下内容:
-
type: HostPath
hostPath: /var/run/docker.sock
mountPath: /var/run/docker.sock
根据 AKS 安全设置,我正在尝试做的事情是否可能,或者我只是搞砸了我的图表?
如果无法将 docker 套接字安装到 AKS 中的容器中,那很好,我只需要一个明确的答案。
谢谢,
解决方案
好吧,我们不久前为 VSTS(云 TFS,现在称为 Azure DevOps)构建代理做了这个,所以它应该是可能的。我们这样做的方式也是安装 docker.sock
对我们来说相关的部分是:
... container spec ...
volumeMounts:
- mountPath: /var/run/docker.sock
name: docker-volume
volumes:
- name: docker-volume
hostPath:
path: /var/run/docker.sock
推荐阅读
- java - 如何隐藏和取消隐藏导航项单击的视图?
- java - java.net.ConnectException:连接被拒绝:在 java.net.PlainSocketImpl.socketConnect(本机方法)处连接
- flutter - 颤振:google_mobile_ads 酒吧。如何实现 GADLandscapeAnchoredAdaptiveBannerAdSizeWithWidth & GADPortraitAnchoredAdaptiveBannerAdSizeWithWidth?
- c# - C# 静态方法是否同步和锁定?
- visual-studio - 查找 Visual Studio PATH/LIB 文件的问题
- python - 并行处理没有提高效率?
- android - 如何在 Jetpack compose 中制作 FlipCard 动画
- swift - 无法导入 EventKitUI。错误无法构建 Objective-C 模块
- c++ - 在 dll 中调用函数,同时在其中包含 dll/lib 文件
- coq - 为什么在相当简单的情况下无法进行案例分析