$ docker run -it --cap-add SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro dockerimages/docker-systemd
Salida:
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
Actualización 2021
Se enviaron muchos parches a diferentes proyectos como los repositorios de docker upstream por REDHAT.To para ser más claros, mi hermano David Walsh @ REDHAT también publicó mucho sobre eso.https://developers.redhat.com/blog/author/rhatdan/.
La ejecución de SystemD Sin Privilegios adicionales requiere
/run como un tmpfs./sys/fs/cgroup solo lectura./sys/fs/cgroup/systemd lectura / escritura./etc/machine-id Necesita contener un ID de máquina únicoSIGRTMIN+3 como stopsignal como sigterm no funcionará/var/log/journal Si no existe, escribirá en la memoria
Para ejecutar systemd en un contenedor Docker, el host el sistema también debe ejecutar systemd. Esto significa que no puede usar Ubuntu < 16.04 como host.
Actualmente, systemd no se ejecuta correctamente dentro de un contenedor docker, debido a una serie de razones, es decir, la falta de los privilegios correctos. Puede leer sobre eso en una variedad de problemas de github en el proyecto docker como la ejecución de systemd dentro del contenedor docker arch se bloquea o se segfaults y problemas relacionados con el monitoreo de inicio/proceso. (Me gustaría vincular más problemas aquí, pero no puedo, ya que aparentemente no tengo suficiente reputación).
Como puede ver, este es un tema en el que se está trabajando actualmente y ya se han fusionado algunos parches para mejorar el comportamiento, por lo que podemos esperar que esto funcione bastante pronto.
Aparentemente, algunos desarrolladores ya lograron que se ejecutara en sistemas fedora, como lo han documentado en su blog.
A partir de 2018, esto ahora funciona para mí: docker run -it -e container=dockertu-nombre-de-imagen/sbin/init
Sin embargo, esto no le dará un shell, por lo que primero deberá habilitar algún servicio de systemd (por ejemplo, sshd) dentro de la imagen si aún no se ha hecho, para hacer algo útil.
Encontré esta pregunta al intentar hacer esto en el contenedor oficial debian:8.Para cualquier otra persona que intente hacer esto en el contenedor oficial debian:8 (debian:jessie), la respuesta de @Frank-from-DSPEED funciona con una ligera modificación como se describe en una publicación antigua de git hub:
Docker 1.1 hace que esto sea más fácil ya que los grupos (ro) ya se proporcionan en los contenedores; actualmente, todavía necesito acceso priv para que pueda crear montajes PrivateTmp, pero de lo contrario, siempre que especifique el cmd que se ejecutará como el binario systemd, funciona bien.