Executando o systemd dentro de um contêiner docker (arch linux)

10

Estou tentando ver se consigo executar o systemd dentro de um contêiner docker (que está executando o arch linux no contêiner).

Eu inicio o docker com todos os recursos e vinculo a montagem aos cgroups:

docker run -it --rm --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro ..

no entanto, se eu tentar executar o binário systemd:

Trying to run as user instance, but the system has not been booted with systemd.

Tentando descobrir como iniciar corretamente as coisas no systemd é iniciado.

    
por Michael Neale 25.06.2014 / 11:26

7 respostas

1

Consegui trabalhar de trás para frente: link

O Docker 1.1 torna isso mais fácil já que grupos (ro) já são fornecidos em contêineres - eu ainda preciso de acesso priv para que ele possa criar montagens de PrivateTmp, mas, caso contrário, especifique o cmd para executar como binários do systemd funciona bem.

    
por 07.07.2014 / 11:32
4

Para executar o systemd em um contêiner do Docker, o sistema host também deve executar o systemd. Isso significa que você não pode usar o Ubuntu como host. No momento, as únicas distribuições de host que eu conheço desse trabalho são o Fedora (que, ao contrário do Ubuntu, tem a versão mais recente do Docker) ou o RHEL 7.

    
por 02.07.2014 / 14:45
3

Aqui meu mestre pice: D executando systemd dentro de um contêiner docker com Ubuntu: D Tenho Ubuntu trabalhando com systemd dentro da janela de encaixe

GitHub Repo para o meu contêiner docker-systemd

$ docker run -it --cap-add SYS_ADMIN -v /sys/fs/cgroup:/sys/fs/cgroup:ro dockerimages/docker-systemd

Saída:

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 view
system logs, "systemctl reboot" to reboot, "systemctl default" or ^D to
try again to boot into default mode.
root@502ec40509a5:~# exit
    
por 21.12.2014 / 04:16
2

Você pode executar o systemd dentro de um contêiner docker. O sistema operacional host não importa, embora você precise montar o volume do sistema / sys / fs / cgroup. Consegui que funcionasse seguindo este guia: link

    
por 13.03.2015 / 04:08
2

Encontrei esta questão ao tentar fazer isso no container debian: 8 official. Para qualquer outra pessoa que tente fazer isso no debian oficial: 8 (debian: jessie) container, a resposta de @ Frank-from-DSPEED funciona com uma pequena modificação conforme descrito em uma postagem mais antiga do hub do git :

docker run -d \
    -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
    --cap-add SYS_ADMIN \
    debian:jessie  /sbin/init
docker exec -it <your-new-container-name-or-ID> bash

Em seguida, no contêiner:

systemctl show-environment

Isso funciona perfeitamente para mim e, como esse é apenas um ambiente de desenvolvimento, o problema de segurança não me importa.

Nota: O comando / sbin / init faz com que / sbin / init seja o Processo 1, o que é uma parte essencial para que isso funcione.

    
por 04.11.2016 / 22:57
1

Atualmente, o systemd não é executado corretamente em um contêiner docker, devido a um conjunto inteiro de motivos, ou seja, a falta dos privilégios corretos. Você pode ler sobre isso em uma variedade de problemas do github no projeto do docker, como executando o systemd dentro de contêineres de contêiner do arch do docker ou segfaults e questões relacionadas ao monitoramento do processo / init. (Eu gostaria de vincular mais problemas aqui, mas não posso, pois aparentemente não tenho reputação suficiente).

Como você pode ver, este é um tópico que está sendo trabalhado atualmente e alguns patches já foram mesclados para melhorar o comportamento, para que possamos esperar que isso funcione muito em breve.

Aparentemente, alguns desenvolvedores já conseguiram fazê-lo rodar em sistemas fedora, já que documentaram em seu blog .

    
por 24.07.2014 / 10:08
0

A partir de 2018, isso agora funciona para mim: docker run -it -e container=docker nome-da-sua-imagem /sbin/init

Isso não lhe dará um shell, portanto, primeiro será necessário ativar algum serviço systemd (por exemplo, sshd) dentro da imagem, se isso já não foi feito, para fazer qualquer coisa útil.

    
por 09.06.2018 / 11:40