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.
Если вы получаете эту ошибку в подсистеме 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, и он работает.