Podman, OCI и HEALTHCHECK
Восстанавливал работоспособность одной репы и столкнулся с забавной особенностью.
Compose файлы, которые там есть – предельно простые. Есть цепочка сервисов, которые запускаются друг за другом. Первым стартует БД, никаких проблем. Вторым – сервис с API для загрузки данных в БД. Опять никаких проблем. Третьим – контейнер с wrk для нагрузочного тестирования. И вот тут загвоздка. Контейнер зависал в бесконечном состоянии “Created”.
Провёл исследование. Оказалось, что при сборке образа API никак не фиксировался HEALTHCHECK! Podman по-умолчанию использует именно OCI спеку контейнеров, а не Docker, и там нет поддержки HEALTHCHECK. Из-за этого не срабатывал condition: service_healthy в Compose-файле, подвешивая контейнер с wrk.
Чтобы решить эту проблему, нужно явно указать формат спеки как Docker при сборке Dockerfile/Containerfile. Для Podman это выглядит так:
$ podman build --format docker .
А вот так для Podman Compose:
$ podman-compose --podman-build-args='--format docker' build
Альтернативный вариант, если не хочется передавать аргумент каждый раз – установить переменную окружения:
$ export BUILDAH_FORMAT=docker
Вот такие пироги :)