docker in docker? No, docker brother

解决方案

让我们退一步,你真的想要 Docker-in-Docker?或者当 CI 系统本身就是一个容器的时候你只是想要在 CI 系统中运行 Docker(具体为:构建、运行,有时 push 容器和镜像)。

我敢打赌,大多数人只是想要后者。你想要的一个解决方案是使得你的像 Jenkins 一样的 CI 系统能够启动容器。

最简单的方法就是通过使用 -v 参数来为你的 CI 系统暴露 Docker 的 socket。

简单的来说,当你启动你的 CI 容器( Jenkins 或者其他),而不是使用 Docker-in-Docker 来 hacking 一些东西,用这条命令启动它:

shell 复制代码
docker run -v /var/run/docker.sock:/var/run/docker.sock ...

现在这个容器将能够访问 Docker Socket,然后就能启动容器。它将启动"兄弟"容器而不是"子"容器。

如果你的 CI 使用 Docker 二进制脚本,你可以将它包含在你的 CI 镜像中或者从主机 bind-mount。例如:

shell 复制代码
docker run -v /var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/bin/docker \
-ti ubuntu

这看起来就像 Docker-in-Docker,感觉起来也像 Docker---in-Docker,但它不是 Docker-in-Docker :当你的CI容器要创建更多容器时,这些容器将会在顶级 Docker 中被创建。你将不会与遇到嵌入的影响,构建缓存也将在多实例中共享。

相关推荐
禅口魔心1 小时前
边缘网关开发计划(一):在 Rock 5T 上部署 Docker
物联网·docker·rk3588·边缘网关
huihuihuanhuan.xin1 小时前
记一次 Docker PostgreSQL 连接认证失败的排查与解决
docker
yaoxin5211231 小时前
390. Java IO API - WatchDir 示例
java·前端·python
Halo_tjn3 小时前
Java 基于字符串相关知识点
java·开发语言·算法
梦想的颜色3 小时前
java 利用redis来限制用户频繁点击
java·开发语言
PH = 74 小时前
OverlayFS联合文件系统使用示例
java·linux·服务器
AC赳赳老秦5 小时前
OpenClaw进阶技巧:批量修改文件内容、替换关键词,解放双手
java·linux·人工智能·python·算法·测试用例·openclaw
Java小白笔记5 小时前
OpenClaw 实战方法论
java·开发语言·人工智能·ai·全文检索·ai编程·ai写作
小义_5 小时前
【Kubernetes】(九)Service 2
云原生·容器·kubernetes
呱牛do it5 小时前
企业级门户网站设计与实现:基于SpringBoot + Vue3的全栈解决方案(Day 5)
java·vue