listar - systemd y systemctl dentro de las imágenes de Ubuntu Docker
imagenes docker (1)
Parece que
systemd
no está activo o disponible en las imágenes de Ubuntu Docker.
Estoy ejecutando contenedores Docker desde las imágenes
ubuntu:16.04
y
ubuntu:16.10
.
Si ejecuto
systemctl status ssh
en el contenedor
16,04
, el resultado es el error
Failed to connect to bus: No such file or directory
existe
Failed to connect to bus: No such file or directory
.
En el contenedor
16.10
, el error es
bash: systemctl: command not found
.
Si hago
which systemctl
systemctl se encuentra en el contenedor
16.04
pero no en el contenedor
16.10
.
He descubierto que
/lib/systemd
existe.
He intentado instalar systemd con
apt-get install systemd libpam-systemd systemd-ui
.
Entonces, ¿
which systemctl
encuentra systemctl en
16.10
pero el
systemctl status ssh
todavía muestra el error
Failed to connect to bus: No such file or directory
systemctl status ssh
Failed to connect to bus: No such file or directory
Mi pregunta principal es: ¿Cómo se pueden activar systemd y systemctl para usarlas en las imágenes de Ubuntu Docker?
¿Por qué systemd no está activo en los contenedores de Ubuntu Docker? ¿No se utiliza systemd para crear instancias del contenedor?
No pude encontrar ninguna documentación sobre este tema para las imágenes de Ubuntu / Ubuntu Docker, solo información sobre la transición de Ubuntu de
Upstart
a
systemd
.
¿Hay alguna documentación que dé una explicación completa?
Esto es por diseño. Docker debería ejecutar un proceso en primer plano en su contenedor y se generará como PID 1 dentro del espacio de nombres pid del contenedor. Docker está diseñado para el aislamiento de procesos, no para la virtualización del sistema operativo, por lo que no hay otros procesos del sistema operativo y demonios ejecutándose dentro del contenedor (como systemd, cron, syslog, etc.), solo su punto de entrada o comando que ejecuta.
Si incluían comandos systemd, encontraría que muchas cosas no funcionan ya que su punto de entrada reemplaza init. Systemd también hace uso de cgroups que Docker restringe dentro de los contenedores, ya que la capacidad de cambiar cgroups podría permitir que un proceso escape del aislamiento del contenedor. Sin systemd ejecutándose como init dentro de su contenedor, no hay demonio para procesar sus comandos de inicio y detención.