$ docker run -it --cap-add SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro dockerimages/docker-systemd
Выход:
systemd 218 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT -GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID -ELFUTILS +KMOD -IDN)Detected virtualization 'docker'.Detected architecture 'x86-64'.Welcome to Ubuntu Vivid Vervet (development branch)!Set hostname to <502ec40509a5>.[ OK ] Created slice Root Slice.[ OK ] Created slice System Slice. Starting Emergency Shell...[ OK ] Started Emergency Shell.Startup finished in 5ms.Welcome to emergency mode! After logging in, type "journalctl -xb" to viewsystem logs, "systemctl reboot" to reboot, "systemctl default" or ^D totry again to boot into default mode.root@502ec40509a5:~# exit
Обновление 2021 года
Множество исправлений было отправлено в разные проекты, такие как репозитории docker upstream от REDHAT.Чтобы было более ясно, мой друг Дэвид Уолш @ REDHAT также много писал об этом.https://developers.redhat.com/blog/author/rhatdan/.
Запуск SystemD Без дополнительных Привилегий требует
/run как tmpfs./sys/fs/cgroup только для чтения./sys/fs/cgroup/systemd чтение/запись./etc/machine-id Должен содержать уникальный идентификатор машиныSIGRTMIN+3 как stopsignal, так и sigterm не будут работать/var/log/journal Если он не существует, он будет записан в память
Чтобы запустить systemd в контейнере Docker, хозяин система также должна запускать systemd. Это означает, что вы не можете использовать Ubuntu < 16.04 в качестве хоста.
В настоящее время systemd некорректно запускается в контейнере docker по целому ряду причин, т.е. из-за отсутствия правильных привилегий. Вы можете прочитать об этом в различных выпусках github по проекту docker, таких как запуск systemd внутри контейнера docker arch зависает или прерывается и связанные с этим вопросы, касающиеся мониторинга инициализации/процесса. (Я хотел бы связать здесь больше вопросов, но я не могу, так как у меня, по-видимому, недостаточно репутации).
Как вы можете видеть, над этой темой в настоящее время ведется работа, и уже было объединено несколько исправлений для улучшения поведения, так что мы можем ожидать, что это сработает довольно скоро.
По-видимому, некоторым разработчикам уже удалось запустить его в системах fedora, как они задокументировали в своем блоге.
По состоянию на 2018 год, это теперь работает для меня: docker run -it -e container=dockerваше-изображение-имя/sbin/init
Однако это не даст вам оболочки, поэтому вам нужно сначала включить какую-либо службу systemd (например, sshd) внутри образа, если это еще не было сделано, чтобы сделать что-нибудь полезное.
Нашел этот вопрос, пытаясь сделать это в официальном контейнере debian:8.Для тех, кто еще пытается сделать это в официальном контейнере debian: 8 (debian: jessie), ответ @Frank-from-DSPEED работает с небольшими изменениями, как описано в более старый пост git hub:
Docker 1.1 упрощает это, поскольку groups (ro) уже предоставляется в контейнерах - в настоящее время мне все еще нужен приватный доступ, чтобы он мог создавать монтирования PrivateTmp, но в остальном, пока вы указываете cmd для запуска как двоичный файл systemd - он работает хорошо.