Docker中42层限制的原因是什么?
在不同的地方,我发现一个docker图片只能包含多达42层的信息。 这似乎是使用的AUFS文件系统的限制。
任何人都可以告诉我为什么这个限制存在,或有人有一些文件解释这一点?
这似乎主要由AUFS ( sfjro/aufs4-linux
)施加。
见PR 50“在核心禁止超过42层”
嘿,出于好奇,这背后的详细理由是什么?
人们一直在问如何绕过42层的限制,我们一直告诉他们“等待设备映射器!” 所以…我们现在应该告诉他们什么?我们目前还不能超过42层。 Devicemapper确实支持它,但是,如果将50层图像推送到registry,大多数人将无法使用它。 一旦我们支持超过42层AUFS,我们将启用此。
PR 66应该取消这个限制
这个线程报道:
42限制来自aufs代码本身。
我的猜测是,这是因为堆栈深度:如果将这些内核数据结构堆叠太深,可能会在某处触发溢出。 硬编码限制可能是避免这种情况的实用方法。
从Docker BP文档 :
最小化层数
您需要find
Dockerfile
可读性(以及长期可维护性)与最小化其使用的层数之间的平衡。 对您使用的图层数量要保持战略性和谨慎。
他们还提供了如何避免太多层次的build议:
这样,你可以删除不再需要的文件,而不需要在图像中添加另一个图层
[..]
最后,要减less层次和复杂性,请避免频繁切换用户。
TL; DR:最小化层数的好处可以被归类为最小化小文件数量的好处,而是更less的大文件。 docker pull
也快( 尝试下载1KB的2048个文件或2MB的文件 )。 并且具有较less的层次降低了图像的复杂度,因此具有可维护性。
至于42
限制。 那么…我想他们必须拿出一个数字,他们select这个特定的;)