Запуск systemd в контейнере Concourse

В настоящее время я пытаюсь заставить контейнер CentOS работать с включенным systemd, чтобы использовать его в качестве среды для задачи Concourse. Связанный конвейер создает пакеты RPM, которые устанавливают службы, управляемые systemd, и я хотел бы запустить тесты в среде, максимально приближенной к предполагаемому варианту использования. Мой контейнер основан на кратком мануале по использованию systemd внутри контейнера CentOS из описания образа CentOS Docker Hub .

Я не уверен на 100%, в чем заключается решающая проблема, но, похоже, это связано с одним из следующих обстоятельств (все или только некоторые из них нуждаются в исправлении/обходном пути, в котором я не уверен):

  1. Похоже, невозможно правильно привязать файловую систему cgroup хоста (или, скорее, рабочего Concourse из-за того, что он использует Docker в Docker) в контейнер CentOS, поскольку Concourse не имеет конфигурации для привязки монтирования для задач. Я попытался сгенерировать необходимые файловые системы «с нуля» внутри контейнера, смонтировав tmpfs на /sys/fs/cgroupа затем смонтировать файловую систему cgroup с именем systemdна /sys/fs/cgroup/systemd, но я не уверен, должно ли это работать.
  2. Зал использует встроенный garden-initдвоичный файл в качестве точки входа изображения и PID 1, что приводит к тому, что systemd работает с другим PID. Согласно руководству CentOS, точка входа должна быть , которая является символической ссылкой на /usr/lib/systemd/systemdХотя это должно быть возможно с --systemфлаг, я все еще не мог заставить все работать полностью.

Я пробовал разные конфигурации задач (запуск через привилегированный fly executeс выполнением команд через bash -exc <command>) с целью иметь возможность успешно работать, но не смогли этого сделать. Конфигурации, которые я пробовал, и ошибки, которые я получил с ними:

  1. Запуск с монтированием или без монтирования systemd cgroup с нуля и с запуском команды или без него execприводит к ошибке Couldn't find an alternative telinit implementation to spawn..
  2. Запуск без монтирования systemd cgroup с нуля до того, как приведет к тому, что systemd не запустится с сообщением об ошибке
    Cannot find cgroup mount point: No such file or directory
    Failed to allocate manager object: No such file or directory
  3. Бег /usr/lib/systemd/systemd --systemпосле монтирования systemd cgroup, как описано, systemd, по-видимому, запускается правильно (вывод такой же, как и при запуске всего за пределами Concourse в соответствии с документацией CentOS), но запуск приводит к ошибке Failed to get D-Bus connection: Operation not permitted.

мне удалось получить systemctl is-system-runningдля работы в контейнере runc, созданном вручную, скопировав пакет контейнера, созданный через Concourse/Garden, и отредактировав только точку входа (точнее, process.argsполе OCI config.json) должно быть /usr/sbin/init, так что кажется, что этого достаточно для моих требований. К сожалению, я не знаю, как настроить конвейер, чтобы добиться этого для контейнера, запущенного из контекста Concourse.

0 ответов

Другие вопросы по тегам