Подтвердить что ты не робот

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.

Я заметил, что существует /lib/systemd.

Я попытался установить 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?

Почему система не работает в контейнерах Ubuntu Docker? Не используется ли systemd при создании экземпляра контейнера?

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

4b9b3361

Ответ 1

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

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