systemd и systemctl в Ubuntu Docker изображения [закрыто]

кажется systemd не активен или недоступен в образах Ubuntu Docker.

Я запускаю контейнеры Docker из ubuntu:16.04 и ubuntu:16.10 картинки.

если я выполнить systemctl status ssh на 16,04 контейнер результатом является ошибка Failed to connect to bus: No such file or directory. В 16.10 контейнер ошибка bash: systemctl: command not found.

если я делаю which systemctl systemctl находится в 16.04 контейнер, но не в 16.10 контейнер.

Я заметил, что .

Я попытался установить systemd с apt-get install systemd libpam-systemd systemd-ui. Тогда which systemctl находит systemctl в 16.10 но systemctl status ssh все еще дает ошибку Failed to connect to bus: No such file or directory

мой главный вопрос: как можно активировать systemd и systemctl для использования в образах Ubuntu Docker?

почему systemd не активен в контейнерах Ubuntu Docker? Это systemd в не используется в инстанцируя контейнер?

мне не удалось найти документацию по этой теме для Ubuntu / Ubuntu Docker изображения, только информация о переходе Ubuntu от Upstart to systemd. Есть ли какие-либо документы, дающие полное объяснение?

1 ответов


Это дизайн. Docker должен запускать процесс на переднем плане в вашем контейнере, и он будет порожден как PID 1 в пространстве имен PID контейнера. Docker предназначен для изоляции процессов, а не для виртуализации ОС, поэтому внутри контейнера нет других процессов ОС и демонов (например, systemd, cron, syslog и т. д.), только ваша entrypoint или команда, которую вы запускаете.

Если бы они включали команды systemd, вы бы нашли много вещей, не работающих с вашего entrypoint заменяет init. Systemd также использует группы, которые docker ограничивает внутри контейнеров, поскольку возможность изменения групп может позволить процессу избежать изоляции контейнера. Без systemd, работающего как init внутри вашего контейнера, нет демона для обработки команд запуска и остановки.