Я пытаюсь использовать systemctl
команда в a ubuntu:16.04
контейнер докера. Я выполняю следующую команду...
systemctl status ssh
Однако я получаю ошибку...
Failed to connect to bus: No such file or directory
Почему это не работает? Это связано с Ubuntu, работающей в контейнере докера? Как я могу добраться systemctl
работать правильно?
Я предполагаю, что Вы запускаете свой контейнер докера с чего-то как
docker run -t -i ubuntu:16.04 /bin/bash
, проблема теперь состоит в том, что Ваш PID 1 процесса init /bin/bash
, не systemd. Подтвердите с 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 ответы .
Вы не можете работать systemd, который является реализацией по умолчанию init на 16,04. Если Вы обновили от 14,04, Вы, скорее всего, все еще работаете выскочка , и результат выполнения , команда systemctl является выводом, который Вы получили.
См. мой ответ в systemctl: команда, не найденная 16,04 серверами для больше.
Только начните dbus
услуга:
/etc/init.d/dbus start
Внутренний контейнер докера, я думаю, что можно обновить-rc.d, если Вы все еще боретесь с systemd. Я попробовал обновлением-rd.c, и оно работает.
Я получал ту же самую ошибку, и затем я выполняю ее успешно с sudo
sudo systemctl status ssh
Попробуйте это:
docker run -ti -d --privileged=true images_docker "/sbin/init"
или
docker run -ti -d --privileged=true images_docker
будет тот же результат.
Здесь я добираюсь из документа Докера:
По умолчанию контейнеры Докера “непривилегированны” и не могут, например, выполнить демона Докера в контейнере Докера. Это вызвано тем, что по умолчанию контейнеру не позволяют получить доступ ни к каким устройствам, но “привилегированному” контейнеру предоставляют доступ ко всем устройствам (см. документацию относительно cgroups устройств).
Когда оператор выполнит выполненного докера - привилегированный, Докер включит доступ ко всем устройствам на хосте, а также установит некоторую конфигурацию в AppArmor или SELinux для разрешения контейнера, почти всего одинакового доступ к хосту как процессы, работающие вне контейнеров на хосте. Дополнительная информация о выполнении с - привилегированный доступна на Блоге Докера.
Если Вы получаете эту ошибку в Windows Subsystem для Linux (WSL), я нашел, что это - потому что Докер не поддерживается. Это происходит из-за отсутствия cgroups и других предпосылок.