Кажется, что 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
. Есть ли какая-либо документация, дающая полное объяснение?
Это по дизайну. Docker должен запускать процесс на переднем плане в вашем контейнере, и он будет порожден как PID 1 в пространстве имен pid контейнера. Docker предназначен для изоляции процессов, а не для виртуализации ОС, поэтому в контейнере нет никаких других процессов и демонов (например, systemd, cron, syslog и т.д.), Только ваша точка входа или команда, которую вы запускаете.
Если они включают в себя команды systemd, вы найдете много вещей, которые не работают, поскольку ваша точка входа заменяет init. Systemd также используется для групп, которые докер ограничивает внутри контейнеров, поскольку возможность изменения групп может позволить процессу избежать изоляции контейнера. Без systemd, запущенного как init внутри вашего контейнера, нет никакого демона для обработки ваших команд старта и остановки.