Проверки и типичные ошибки

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'а.