Docker – Ошибка: не удалось подключиться к шине на некоторых контейнерах, развернутых с помощью docker-compose.

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

У меня есть 3 кластера для развертывания на контейнерах, предоставленных с помощью docker-compose, кластеры имеют 3, 4 и 14 узлов каждый. Все контейнеры построены из одного и того же образа Rocky Linux 8 и имеют SystemD с несколькими службами, работающими на них. В каждом docker-compose.yml добавляется /sys/fs/cgroup:/sys/fs/cgroup:ro к томам. Однако, независимо от порядка, в котором я разворачиваю каждый кластер, я получаю работающий SystemD только на 14 контейнерах, которые были запущены первыми. 15-й контейнер в последовательности, а также каждый другой после этого запускается, но у него нет запущенных служб, и systemctl выдает ошибку, т.е.:

# systemctl status sshd
Не удалось подключиться к шине: Нет такого файла или каталога

Когда я захожу в контейнер с помощью docker exec, я вижу, что монтирование cgroup на месте, но ps aux показывает только:

# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  89084  7556 ?        Ss   13:00   0:00 /usr/sbin/init
root         6  0.0  0.0  21324  3796 pts/0    Ss   13:03   0:00 bash
root        23  0.0  0.0  53952  3848 pts/0    R+   13:15   0:00 ps aux

в то время как на хорошем контейнере больше:

# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 171716 10104 ?        Ss   13:00   0:00 /usr/sbin/init
root        28  0.0  0.0  89464 13432 ?        Ss   13:00   0:00 /usr/lib/systemd/systemd-journald
rpc         30  0.0  0.0  67196  5596 ?        Ss   13:00   0:00 /usr/bin/rpcbind -w -f
root        32  0.0  0.0 202388 14172 ?        Ss   13:00   0:00 /usr/sbin/sssd -i --logger=files
root        45  0.0  0.0  78648  7028 ?        Ss   13:00   0:00 /usr/sbin/sshd -D [email protected],[email protected],aes256-ctr
root        47  0.0  0.0 209484  7108 ?        Ssl  13:00   0:00 /usr/sbin/rsyslogd -n
root        49  0.0  0.0 106028  3708 ?        Ssl  13:00   0:00 /usr/sbin/gssproxy -D
dbus        61  0.0  0.0  76488  5424 ?        Ss   13:00   0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation 
root        62  0.0  0.0 212680 15516 ?        S    13:00   0:00 /usr/libexec/sssd/sssd_be --domain implicit_files --uid 0 --gid 0 --logger=files
root        63  0.0  0.1 224344 40632 ?        S    13:00   0:00 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files
root        67  0.0  0.0  90364  7420 ?        Ss   13:01   0:00 /usr/lib/systemd/systemd-logind
root       645  0.3  0.0  30364  3796 pts/0    Ss   13:15   0:00 bash
root       663  0.0  0.0  62992  3976 pts/0    R+   13:15   0:00 ps aux

Когда я пытаюсь запустить dbus-daemon на неисправном контейнере, я получаю эту ошибку:

# /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
dbus-daemon[24]: Не удалось запустить шину сообщений: Сокет не получен.

Две вещи меня больше всего озадачивают:

  1. Раньше это работало нормально без таких проблем с образами CentOS 7.
  2. Жесткий лимит в 14 контейнеров, которые могут быть развернуты корректно.

Что касается #2. Если я уменьшаю количество работающих контейнеров, неисправные контейнеры начинают нормально работать с SystemD после перезапуска, так что кажется, что где-то установлен лимит, но я еще не смог найти где, поэтому любые комментарии или ответы, которые помогут объяснить или решить эту проблему, будут очень appreciated.

Вы это решили? Я сталкиваюсь с той же проблемой! Я получаю Не удалось подключиться к шине: Нет такого файла или каталога, когда запускаю команду systemctl!

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

Не удается подключиться к шине: ошибка на некоторых контейнерах, развернутых с помощью docker-compose

Введение

Ваша ситуация с ошибкой "Failed to connect to bus: No such file or directory" в контейнерах, запущенных с использованием Docker и Docker Compose, является распространенной проблемой при работе с системами, использующими SystemD в контейнеризированной среде. Рассмотрим причины, диагностику и потенциальные решения этой ошибки.

Описание Проблемы

Вы упомянули, что развертываете 3 кластера, содержащие 3, 4 и 14 узлов, и стали сталкиваться с проблемами после перехода на образ Rocky Linux 8. По вашей информации, при запуске контейнеров с SystemD только первые 14 контейнеров работают корректно — начиная с 15-го контейнера и далее, SystemD не инициализируется должным образом, что и приводит к указанной ошибке.

Важные Аспекты

  1. Использование монтирования cgroup: Вы правильно добавили /sys/fs/cgroup:/sys/fs/cgroup:ro в docker-compose.yml, что необходимо для работы SystemD.
  2. Ограничение на количество правильных контейнеров: Вы указали, что когда количество работающих контейнеров снижается, "неисправные" контейнеры начинают работать корректно после перезапуска.

Причины Проблемы

  1. Ограничение ресурсов: Возможно, в вашей системе установлены ограничения на количество ресурсов, доступных для системных процессов. Это может быть связано с настройкой Docker или с системными ограничениями (например, конфигурациями cgroups или ulimits).

  2. Процессы D-Bus: Каждый экземпляр SystemD требует работающего D-Bus для выполнения большинства своих функций. Ошибка при попытке запуска dbus-daemon указывает на возможность отсутствия необходимого сокета для системного шины сообщений.

  3. Изменения в системах на базе RHEL: Возможные изменения между CentOS 7 и Rocky Linux 8 могут повлиять на реализацию SystemD и его работу в контейнерах. В частности, контроль доступа и разделяемые пространства имен могут отличаться.

Методы Устранения Проблем

  1. Проверка ресурсов:

    • Убедитесь, что система не достигла предела по количеству процессов или потоков. Используйте команды ulimit -a и проверьте настройки в /etc/security/limits.conf.
  2. Параметры Docker:

    • Проверьте настройки вашего демона Docker. В частности, обратите внимание на конфигурацию --default-ulimits в конфигурационном файле Docker.
  3. Логи SystemD:

    • Проверьте журналы (journalctl) для получения дополнительной информации о сбоях SystemD и D-Bus.
  4. Обновление образа:

    • Попробуйте протестировать с последней доступной версией образа Rocky Linux 8 или переключиться на другой базовый образ на некоторое время, чтобы оценить, устранит ли это ваше затруднение.
  5. Контейнерное запуска с флагом --privileged:

    • Внедрение флага --privileged в Docker может предоставить все необходимые разрешения для работы с самими контейнерами и улучшить инициализацию SystemD.
  6. Альтернативные методы управления службами:

    • Рассмотрите возможность использования других инструментов управления службами, таких как supervisord, если это подходит для вашего проекта, чтобы избежать проблем с SystemD в контейнерах.

Заключение

Ошибки, подобные "Failed to connect to bus: No such file or directory", требуют тщательной диагностики и понимания взаимодействий между системой и средой контейнеров. Применяя описанные методы и проверяя системные ресурсы, возможно, вы сможете решить эту проблему. При необходимости обновляйте свою среду, чтобы обеспечить совместимость и безотказность развертываний.

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

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