systemctl не удалось подключиться к шине - Docker Ubuntu:16.04 контейнер

Я пытаюсь использовать systemctl команда в ubuntu:16.04 Докер контейнер. Я запускаю следующую команду...

systemctl status ssh

Однако я получаю ошибку...

Failed to connect to bus: No such file or directory

Почему это не работает? Это связано с тем, что Ubuntu работает в Docker-контейнере? Как я могу получить systemctl правильно работать?

7 ответов

Решение

Я полагаю, вы начинаете свой док-контейнер с чем-то вроде

docker run -t -i ubuntu:16.04 /bin/bash

Проблема в том, что ваш процесс инициализации PID 1 /bin/bashне системный. Подтвердите с помощью ps aux,

В дополнение к этому вы пропустите dbus с будет способ общения. Вот откуда приходит ваше сообщение об ошибке. Но так как ваш PID 1 не systemd, он не поможет установить dbus.

Лучше всего было бы переосмыслить способ, которым вы планируете использовать докер. Не полагайтесь на systemd в качестве диспетчера процессов, но пусть докер-контейнер запускает желаемое приложение на переднем плане.

Другие сообщили о подобной проблеме. Запустите терминал и введите:

$ env

Видите ли вы переменную среды, как это?

XDG_RUNTIME_DIR=/run/user/`id -u`

куда id -u заключено в кавычки, а не в одинарные кавычки. Эта переменная обычно интерпретируется в число 1000 для постоянных пользователей и 0 для супер пользователя (sudo).

Если переменная среды XDG_RUNTIME_DIR не существует, вам нужно создать его. Полное обсуждение находится в панели ответов systemd.

Просто начни dbus служба:

/etc/init.d/dbus start

Если вы получаете эту ошибку в подсистеме Windows для Linux (WSL), я обнаружил, что это потому, что Docker не поддерживается. Это связано с отсутствием cgroups и других предпосылок.

Попробуй это:

docker run -ti -d --privileged=true images_docker  "/sbin/init"

или же

docker run -ti -d --privileged=true images_docker

будет такой же результат.

Здесь я получаю из докера:

По умолчанию контейнеры Docker являются "непривилегированными" и не могут, например, запускать демон Docker внутри контейнера Docker. Это связано с тем, что по умолчанию контейнеру не разрешен доступ к каким-либо устройствам, а "привилегированному" контейнеру предоставляется доступ ко всем устройствам (см. Документацию по устройствам cgroups).

Когда оператор выполняет Docker, запустите --privileged, Docker разрешит доступ ко всем устройствам на хосте, а также установит некоторую конфигурацию в AppArmor или SELinux, чтобы позволить контейнеру почти такой же доступ к хосту, как процессам, выполняющимся вне контейнеров на хосте., Дополнительная информация о работе с --privileged доступна в блоге Docker.

Я получаю точно такую ​​же ошибку, а затем успешно запускаю ее с sudo

sudo systemctl status ssh

Возможно, вы не используете systemd, которая является реализацией init по умолчанию 16.04. Если вы выполнили обновление с 14.04, скорее всего, вы все еще используете upstart, и результатом выполнения команды systemctl будет полученный вами результат.

Смотрите мой ответ на systemctl: команда не найдена 16.04 сервер для получения дополнительной информации.

Я думаю, что внутри docker-контейнера вы можете обновить -rc.d, если вы все еще боретесь с systemd. Я пытался с update-rd.c, и он работает.

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