在我当前的项目中,我们使用Jenkins和基于Docker-In-Docker的方法来构建Docker映像。
我扩展了我们的工作之一,以使用docker-compose和Landoops Commandline测试工具土狼使用集成测试。我确实在构建中构建了生产docker映像以及仅用于集成测试的docker映像。
一段时间后(我认为/ var / lib / docker)下的docker空间填满了整个磁盘,我得到了这样的信息:
mkdir /var/lib/docker/volumes/41d787304856fb065aa0d6342efe0a0c38672775fc044a3345ae5067ec8b8f3c: no space left on device
当我与清洁卷一起执行docker系统修剪时,构建/测试将再次运行,但必须再次下载大量docker映像,并且在下载/构建过程中进行另一项测试时不应执行此操作码头工人图像。
所以我的结论是:Docker-In-Docker(尤其是本地映像存储库和卷存储)正在使用“外部” Docker注册表和卷存储。
我的问题是:是否有解决此问题的方法,而不删除每个作业之后/之前的所有图像/卷?
更新:
我确实找到了
“设备映射器未命名空间,因此,如果Docker的多个实例在同一台计算机上使用它们,则它们都将能够看到(并影响)彼此的映像和容器支持设备。没有bueno。有许多解决方法其中的一些问题;例如,如果您想在内部Docker中使用AUFS,只需将/ var / lib / docker升级为卷即可,您会很好的。Docker在Device Mapper目标名称中添加了一些基本的命名空间,以便如果在同一台机器上运行多个Docker调用,它们将不会互相踩踏。”
来自:https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/
在我看来,我们的OPS团队似乎只是在不使用devicemapper命名空间的情况下挂载了它,因此同一节点上的每个作业都使用相同的/ var / lib / docker。