Проверки и типичные ошибки
altflow-test
Общий формат altflow-test описан в спецификации образов.
Для distroless-образов важно учитывать состав rootfs:
- если shell не добавлен в rootfs, нельзя использовать
/bin/sh; - если бинарник не поддерживает
--helpили--version, не используйте эти флаги; - если entrypoint запускает daemon или controller, тест не должен зависать;
- для образов на
scratchпроверяйте только реально существующие бинарники.
Команды без shell
Distroless-образ не обязан содержать /bin/sh. Поэтому такие тесты часто неверны:
[
[
"/bin/sh",
"-ec",
"test -x /usr/bin/app"
]
]
Они подходят только для образов, где shell явно добавлен, например для distroless-devel,
distroless-toybox или distroless-busybox.
Динамический бинарник не запускается
Если бинарник есть, но запуск падает из-за отсутствующей .so, проверьте:
- добавлен ли бинарник через
full_filesилиlibrary_files; - поддерживает ли
lddэтот файл; - есть ли нужные библиотеки в пакетах из
binary_packages; - не нужен ли runtime-слой
distroless-baseилиdistroless-cc.
Для динамического исполняемого файла обычно нужен один из вариантов:
rootfs:
full_files:
- /usr/bin/app
или:
rootfs:
files:
- /usr/bin/app
library_files:
- /usr/bin/app
Когда нужен custom Dockerfile
Стандартный distroless-шаблон подходит для большинства runtime-образов. Custom Dockerfile нужен, если требуется нестандартная подготовка rootfs:
- создать symlink'и вручную;
- скопировать applet'ы busybox;
- выполнить дополнительные команды после
distroless_add(); - проверить или изменить файлы в
/rootfs.
Даже в custom Dockerfile секция distroless может быть полезна: она включает DistrolessImage
и даёт доступ к helper'ам renderer'а.