Running systemd all'interno di un contenitore docker (arch linux)

Sto cercando di vedere se posso eseguire systemd all'interno di un contenitore docker (che è in esecuzione arch linux nel contenitore).

Comincio a fare tutte le funzionalità e bind il supporto in gruppi:

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

tuttavia, se cerco di eseguire il binario systemd:

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

Cercando di scoprire come avviare correttamente le cose per avviare systemd.

  • Come faccio a determinare l'utente / gruppo di Linux che esegue i lavori del gestore di sistema?
  • L'unità polkitd.service è mascherata
  • Imansible emettere chiamata di metodo: Unità ... non è rioutput a caricare: nessun file o directory di questo tipo
  • nomi di interface di networking prevedibili in systemd
  • Il servizio Systemd inizia con il valore della port dynamic da Docker
  • Come posso submit un messaggio al diario systemd dalla row di command?
  • Impostazione di MemoryLimit di un ambito di sistema creato dall'utente utilizzando i gruppi come utente
  • elasticsearch fallisce periodicamente su ubuntu con systemd: come risolvere questo problema?
  • 6 Solutions collect form web for “Running systemd all'interno di un contenitore docker (arch linux)”

    Per eseguire systemd in un contenitore Docker, il sistema host deve anche eseguire systemd. Ciò significa che non è ansible utilizzare Ubuntu come host. A questo punto le sole distribuzioni di host che conosco di quel lavoro sono Fedora (che, a differenza di Ubuntu, ha l'ultima versione di Docker) o RHEL 7.

    Qui il mio pice master: D running systemd all'interno di un contenitore docker con ubuntu: D Ho Ubuntu che lavora con il sistema di dock interno

    GitHub Repo per il mio contenitore dock-systemd

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

    Produzione:

     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 

    È ansible eseguire systemd all'interno di un contenitore docker. Il sistema operativo host non ha importnza, anche se sarà necessario montare il volume host / sys / fs / cgroup. Ho ottenuto che funziona seguendo questa guida: http://developerblog.redhat.com/2014/05/05/running-systemd-within-docker-container/

    Attualmente systemd non viene eseguito correttamente in un contenitore docker, a causa di un insieme di motivi, ovvero la mancanza di privilegi corretti. È ansible leggere su questo in una varietà di problemi di github sul progetto docker come l' esecuzione di systemd all'interno di appositi contenitori di archivio docker o segfaults e questioni correlate riguardanti il ​​monitoraggio init / process. (Vorrei colbind altri argomenti qui, ma non posso, visto che a quanto pare non ho abbastanza reputazione).

    Come si può vedere, questo è un argomento in corso di elaborazione e alcune patch sono state unite già per migliorare il comportmento, affinché possiamo aspettarci che questo funzioni presto.

    A quanto pare alcuni sviluppatori sono riusciti a farlo funzionare sui sisthemes fedora, come hanno documentato nel loro blog .

    Trovato questa domanda mentre tentava di farlo nel debian: 8 contenitori ufficiali. Per chiunque altro cerca di farlo sul debian ufficiale: 8 (debian: jessie) contenitore, la risposta di @ Frank-da-DSPEED funziona con una leggera modifica come descritto in un post più vecchio hub 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 

    Poi dal contenitore:

     systemctl show-environment 

    Questo funziona perfettamente per me e poiché questo è solo un ambiente di sviluppo, il problema della sicurezza non mi import.

    Nota: Il command / sbin / init ottiene / sbin / init per essere Process 1, che è una parte fondamentale per rendere questo lavoro.

    Ho potuto lavorare indietro da questo: https://registry.hub.docker.com/u/codekoala/arch/

    Docker 1.1 lo rende più facile in quanto i gruppi (ro) sono già forniti in contenitori – attualmente ho ancora bisogno di accesso privato in modo da creare i supporti di PrivateTmp, ma altrimenti, fintanto che specifichi il cmd da eseguire come binario systemd, funziona bene.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.