Estoy tratando de ver si puedo ejecutar systemd dentro de un contenedor docker (que ejecuta arch linux en el contenedor).
Comienzo Docker con todas las capacidades, y enlazo mount en cgroups:
docker run -it --rm --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro ..
sin embargo, si intento ejecutar el binario systemd:
Trying to run as user instance, but the system has not been booted with systemd.
Intenta descubrir cómo iniciar las cosas correctamente en systemd comienza.
arch-linux
docker
systemd
Michael Neale
fuente
fuente
systemd
página del manual sería un buen lugar para comenzar. Google también publica varios artículos sobre cómo ejecutar systemd en docker.Respuestas:
Para ejecutar systemd en un contenedor Docker, el sistema host también debe ejecutar systemd. Esto significa que no puede usar Ubuntu como el host. En este momento, las únicas distribuciones de host que conozco de ese trabajo son Fedora (que, a diferencia de Ubuntu, tiene la última versión de Docker) o RHEL 7.
fuente
Aquí mi pice maestro: D ejecutando systemd dentro de un contenedor docker con ubuntu: D Tengo Ubuntu trabajando con systemd dentro de docker
GitHub Repo para mi contenedor docker-systemd
Salida:
fuente
Actualmente, systemd no se ejecuta correctamente dentro de un contenedor acoplable, debido a un conjunto completo de razones, es decir, la falta de los privilegios correctos. Puede leer sobre eso en una variedad de problemas de github en el proyecto de docker, como ejecutar systemd dentro de contenedores de archivadores de docker que se cuelgan o segfaults y problemas relacionados con la supervisión 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 algunos parches ya se han fusionado para mejorar el comportamiento, por lo que podemos esperar que esto funcione muy pronto.
Aparentemente, algunos desarrolladores ya lograron que se ejecute en sistemas fedora, como lo han documentado en su blog .
fuente
Puede ejecutar systemd dentro de un contenedor acoplable. El sistema operativo host no importa, aunque necesitará montar el volumen / sys / fs / cgroup del host. Lo hice funcionar siguiendo esta guía: http://developerblog.redhat.com/2014/05/05/running-systemd-within-docker-container/
fuente
/sys/fs/cgroup
, que ha mencionado).Pude trabajar hacia atrás desde esto: https://registry.hub.docker.com/u/codekoala/arch/
Docker 1.1 lo hace más fácil ya que los grupos (ro) ya se proporcionan en contenedores; todavía necesito acceso privado para que pueda crear montajes PrivateTmp, pero de lo contrario, siempre que especifique el cmd para ejecutar como el binario systemd, funciona bien.
fuente
Encontré esta pregunta al intentar hacer esto en el contenedor oficial de debian: 8. Para cualquier otra persona que intente hacer esto en el contenedor oficial de debian: 8 (debian: jessie), la respuesta de @ Frank-from-DSPEED funciona con una ligera modificación como se describe en una publicación anterior de git hub :
Luego, desde el contenedor:
Esto funciona perfectamente para mí y dado que este es solo un entorno de desarrollo, el problema de seguridad no me importa.
Nota: El comando / sbin / init hace que / sbin / init sea el Proceso 1, que es una parte clave para que esto funcione.
fuente
systemctl show-environment
Reutrns para míFailed to get D-Bus connection: Unknown error -1
. Cuando comienzo el contenedor con una--privileged
bandera en lugar de--cap-add SYS_ADMIN
(docker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name=ubuntu_systemd_test debian:jessie /sbin/init
) systemctl responde como de costumbreA partir de 2018, esto ahora funciona para mí:
docker run -it -e container=docker
your-image-name/sbin/init
Sin embargo, esto no le dará un shell, por lo que primero deberá habilitar algún servicio systemd (por ejemplo, sshd) dentro de la imagen si eso no se ha hecho, para hacer algo útil.
fuente