systemctl изнутри контейнера докеров не работает с ошибкой подключения D-Bus

Я установил контейнер докеров на основе OpenSuse 12, установил некоторые дополнительные файлы и скопировал некоторые двоичные файлы установщика в контейнер. Пока все нормально.

Изнутри работающего образа контейнера мне теперь нужно запустить вышеупомянутую программу установки, но для этого необходимо, чтобы uuid.socket был запущен и работал - uuid.socket, в свою очередь, требует systemctl для правильной работы, и это вызывает такую ​​ошибку:

hxehost:/usr/sap/SRCFiles # systemctl
Failed to get D-Bus connection: Unknown error -1

Я запустил докер-контейнер так:

docker run -h hxehost -i -t f3096b0aa964 /bin/bash

Что, согласно некоторым сообщениям, должно запускать контейнер машины, а не контейнер приложения.

Может кто подскажет, что я здесь делаю не так ??? Как заставить systemctl работать внутри контейнера докеров?

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

docker run --privileged --rm -ti -e 'container=docker' -h hxehost --network="bridge" --tmpfs /run --tmpfs /tmp -v /sys/fs/cgroup:/sys/fs/cgroup:ro siliconchris/hxe:v0.0.2 /bin/bash

Если я это сделаю, systemctl по-прежнему выдает ту же ошибку.

Если я запускаю / sbin / init вместо / bin / bash, я вижу, что запускается довольно много служб (некоторые, такие как wicked, login и module, терпят неудачу). В конце концов, контейнер представляет мне логин. После входа в систему я теперь могу выполнить systemctl, и он показывает все службы с их соответствующими состояниями.

Теперь мой следующий вопрос: ВОЗМОЖНО ЛИ ЭТОТ ПОДХОД ???

С наилучшими пожеланиями,

Крис

Репозиторий этого образа можно найти в SAP HANA Express Edition в докере


person siliconchris    schedule 10.11.2016    source источник
comment
см. github.com/docker/docker/issues/7459 и github.com/docker/docker/pull/25567   -  person user2915097    schedule 10.11.2016
comment
Привет, user2915097, спасибо за ответ. К сожалению, я, вероятно, слишком новичок в докере, чтобы следить за ним, поскольку я этого не понимаю. Связанные записи говорят о запуске контейнера определенным образом, что мне понравилось: docker run --privileged --rm -ti -e 'container = docker' -h hxehost --network = bridge --tmpfs / run - -tmpfs / tmp -v / sys / fs / cgroup: / sys / fs / cgroup: ro Siliconechris / hxe: v0.0.2 bin / bash Теперь это не решает проблему. Тем не менее systemctl не работает с той же ошибкой. Я обновлю текст своего вопроса соответственно   -  person siliconchris    schedule 11.11.2016


Ответы (1)


Большинство современных систем Linux зависят от запущенного SystemD, и systemctl будет отправлять ему запросы. Однако большинство приложений установилось легко, когда я заменил двоичный файл systemctl скриптом, который просто интерпретирует команды start / stop / status / enable. В качестве еще одного преимущества больше не потребуются эти сложные команды запуска для результирующего образа, чтобы преобразовать systemd в контейнер. Может быть, это вам поможет? Ознакомьтесь с docker-systemctl-replace.

person Guido U. Draheim    schedule 23.03.2017