докерный сокет не запускается при загрузке с группой в sssd

Вопрос или проблема

Я запускаю Docker в изолированном режиме с конфигурацией daemon.json, содержащей:

"group": "devgp",
"userns-remap": "default",

и ‘devgp’ — это группа, определенная в LDAP через sssd. Это означает, что она неизвестна системе при загрузке до тех пор, пока сеть не будет работать и sssd не запустится.

Docker не запускается при загрузке, но запускается нормально вручную после этого. В syslog мы находим

Nov 29 18:30:18 dotter systemd: Не удалось изменить владельца сокета на шаге GROUP: Нет такого процесса
Nov 29 18:30:18 dotter systemd: процесс управления docker.socket завершился, код=выход с статусом=216
Nov 29 18:30:18 dotter systemd: Не удалось прослушивать сокет Docker для API.
Nov 29 18:30:18 dotter systemd: Зависимость не выполнена для движка приложений Docker.
Nov 29 18:30:18 dotter systemd: Задача docker.service/start завершилась с результатом 'зависимость'.
Nov 29 18:30:18 dotter systemd: Юнит docker.socket вошел в состояние ошибки.

Хорошо, мне нужно сделать так, чтобы задачи Docker зависели от сети и sssd. Поэтому я создаю /etc/systemd/system/docker.socket.d/override.conf с:

[Unit]
After=network-online.target firewalld.service containerd.service sssd.service
Wants=network-online.target sssd.service

[Socket]
SocketGroup=qtim

и создаю /etc/systemd/system/docker.service.d/override.conf с:

[Unit]
After=sssd.service

но это все равно не работает, и syslog содержит следующие сообщения:

Nov 30 08:02:37 dotter systemd: Найден цикл порядка при старте sockets.target
Nov 30 08:02:37 dotter systemd: Найдена зависимость на docker.socket/start
Nov 30 08:02:37 dotter systemd: Найдена зависимость на firewalld.service/start
Nov 30 08:02:37 dotter systemd: Найдена зависимость на basic.target/start
Nov 30 08:02:37 dotter systemd: Найдена зависимость на sockets.target/start
Nov 30 08:02:37 dotter systemd: Разрыв цикла порядка путем удаления задачи docker.socket/start
Nov 30 08:02:37 dotter systemd: Задача docker.socket/start удалена для разрыва цикла порядка, начинающегося с sockets.target/start

и, следовательно, даже не пытается запустить Docker.

Есть ли идеи о магии, чтобы заставить systemd запускать сокет и службу Docker только после того, как сеть и sssd будут запущены?

У меня была та же проблема в среде FreeIPA. Сначала я пробовал что-то похожее, но модифицируя docker.socket, я получал ошибку о цикле порядка. В конце концов, я просто добавил эту строку в docker.service, и это сработало для меня:

Wants=network-online.target sssd.service

/lib/systemd/system/docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service containerd.service
Wants=network-online.target sssd.service
Requires=docker.socket containerd.service

Ответ или решение

Решение проблемы с запуском Docker Socket при использовании SSSD

Когда вы сталкиваетесь с проблемой запуска Docker в изолированном режиме с использованием группы, определенной через LDAP и SSSD, это может привести к ошибкам при запуске сокета Docker на этапе загрузки. Ваша ситуация демонстрирует классическую проблему зависимости между сервисами, которые необходимы для корректного запуска Docker. Давайте рассмотрим решение этой проблемы более детально.

Проблема

Ваши настройки в daemon.json:

{
  "group": "devgp",
  "userns-remap": "default"
}

Это означает, что Docker ожидает группы "devgp" быть доступной во время своего запуска. Однако так как группа определяется через LDAP и SSSD, она не доступна при первой попытке запуска Docker, так как networking и SSSD могут еще не быть инициализированы. Это приводит к ошибкам в логах:

Failed to chown socket at step GROUP: No such process

Также в логах присутствуют сообщения о цикле зависимостей, что указывает на проблему, связанную с порядком, в котором системные службы запускаются.

Решение

Чтобы исправить эту проблему, необходимо убедиться, что Docker начинает свою работу только после успешной инициализации network-online.target и службы sssd. Вы уже предприняли шаги для изменения конфигурации, создав файлы переопределения для docker.socket и docker.service. Однако вы столкнулись с циклом зависимостей.

  1. Корректировка конфигурации docker.socket и docker.service:

    Добавьте следующие параметры в ваш файл docker.service, который можно найти в /lib/systemd/system/docker.service:

    [Unit]
    Description=Docker Application Container Engine
    Documentation=https://docs.docker.com
    After=network-online.target firewalld.service containerd.service
    Wants=network-online.target sssd.service
    Requires=docker.socket containerd.service

    Этот подход гарантирует, что сервис Docker будет ждать, пока не будут загружены network-online.target и sssd.service.

  2. Обновление конфигурации сокета Docker:

    Ваш файл /etc/systemd/system/docker.socket.d/override.conf нужно настроить, чтобы он не конфликтовал с зависимостями. Убедитесь, что он выглядит следующим образом:

    [Unit]
    After=network-online.target
    Wants=network-online.target sssd.service
    
    [Socket]
    SocketGroup=devgp

    Обратите внимание, что стоит использовать devgp в качестве SocketGroup, что соответствует вашей первоначальной конфигурации.

  3. Перезагрузка systemd и Docker:

    После внесения изменений, не забудьте перезагрузить systemd, применить изменения и последующий перезапуск Docker. Это можно сделать следующими командами:

    sudo systemctl daemon-reload
    sudo systemctl restart docker.socket
    sudo systemctl restart docker.service
  4. Проверка статуса:

    После выполнения этих шагов проверьте статус служб:

    sudo systemctl status docker.service
    sudo systemctl status docker.socket

Заключение

Такой подход должен помочь избежать ошибок при запуске Docker, связанных с недоступностью группы, определенной через SSSD. Убедитесь, что все зависимости корректно определены, и мониторьте систему на наличие возможных новых ошибок. Если эта проблема продолжает возникать, полезно обратиться к логам для дальнейшей диагностики и корректировки настроек.

Оцените материал
Добавить комментарий

Капча загружается...