Как Alister said, при использовании файловой системы AUFS существует верхнее ограничение количества слоев в изображении Docker. В версии Docker 0.7.2 предел был увеличен до 127 уровней (changelog).
Поскольку это ограничение основной файловой системы союза (в случае AUFS), использование Quay или других частных реестров не изменит результат. Но вы можете использовать другую файловую систему.
Текущая альтернативная файловая система должна использовать devicemapper
(см. CLI docs). Эти другие файловые системы могут иметь разные ограничения на количество слоев - я не думаю, что devicemapper имеет верхний предел.
Вы правы, выполнив несколько команд в одном заявлении RUN, вы можете уменьшить количество слоев.
В качестве альтернативы, если вам действительно нужно много слоев для создания изображения, вы можете создать изображение до тех пор, пока оно не достигнет максимума, а затем используйте docker export
для создания несшитой копии файловой системы изображения. Затем docker import
, чтобы снова включить его в изображение, на этот раз с одним слоем и продолжить строительство. Тем не менее, вы теряете историю.
Спасибо за ваш ответ. Поэтому, если я создаю изображение с файлом Docker, имеющим 41 строку, и нажимаю его на Quay и создаю другое изображение, использующее мое начальное изображение с Quay в качестве базы, я могу добавить еще 41 строку в файл Dockerfile? –
@RezaSanaie мое понимание в том, что это неверно. Первое нажатое изображение содержит 41 слой. Если вы зависите от этого, у вас будут эти 41 уровень, а затем добавьте что-нибудь лишнее. AUFS используется для простое разделение файловых систем. Я думаю, что это огромное ограничение в Docker, но, возможно, они ждут, когда AUFS обработает больше слоев вверх по течению. – d11wtq
Итак, лучший способ сделать это - это установить скрипт установки и запустить его. Это верно? –