Soru Bir docker kabının içinde çalışan sistemd (arch linux)


Bir docker konteynerinin içinde systemd çalıştırabileceğimi görmeye çalışıyorum.

Docker'ı tüm yeteneklerle başlatıyorum ve gruplara bağlanmaya başladım:

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

Ancak, systemd binary'yi çalıştırmayı denediğimde:

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

Bir şeyi sisteme doğru şekilde nasıl başlatacağınızı bulmaya çalışmak başlar.


10
2018-06-25 09:26


Menşei


systemd Adam sayfası başlamak için iyi bir yer olurdu. Google ayrıca, docker altında çalışan sistemd hakkında birkaç makale verir. - larsks
Neden sisteme ihtiyaç duyduğunuzu açıklar mısınız? - 030


Cevaplar:


Bir Docker kapsayıcısında systemd çalıştırmak için evsahibi Sistem ayrıca systemd'yi de çalıştırmalıdır. Bu, Ubuntu'yu ana bilgisayar olarak kullanamayacağınız anlamına gelir. Şu anda bu işi bildiğim tek ana bilgisayar dağıtımları Fedora (Ubuntu'dan farklı olarak, Docker'ın en son sürümüne sahip) veya RHEL 7'dir.


4
2017-07-02 12:45



Arch Linux ayrıca systemd kullanıyor. - Jason Antman
16.04'teki ubuntu, varsayılan olarak systemd'yi kullanır - Scott Stensland


Burada benim ana pice: D ubuntu ile docker konteyner içinde çalışan sistemd: D Ben Ubuntu docker içinde systemd ile çalışıyorum

Benim docker sistemli konteyner için GitHub Repo

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

Çıktı:

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

3
2017-12-21 03:16



Teknik olarak bu işe yarıyor ama bunu yapmak için içeriğin güvenliğini kırmanız gerekiyordu. Bu, bir üretim dağıtımı için uygun değildir. - Michael Hampton♦
Bugün daha az güvenlik bayraklarıyla thuis daha kolay mümkün - Frank from DSPEED


Systemd'i bir docker kabının içinde çalıştırabilirsiniz. Ana bilgisayar işletim sistemi önemli değildir, ancak ana bilgisayarın / sys / fs / cgroup hacmini monte etmeniz gerekecektir. Bu kılavuzu takip ederek işe koyuldum: http://developerblog.redhat.com/2014/05/05/running-systemd-within-docker-container/


2
2018-03-13 03:08



ServerFault'a hoş geldiniz. Bir çözüme bağlantı vermek yerine, lütfen cevabınızın temel noktalarını burada belirtin. Bu şekilde, bağlantı hedefi giderse cevabınız yine de yararlı olacaktır. - Andrew Schulman


Debian'da bunu yapmaya çalışırken bu soruyu buldum: 8 resmi kapsayıcı. Bunu, resmi debianda yapmaya çalışan başka biri için: 8 (debian: jessie) konteynır, @ Frank-from-DSPEED'in cevabı, açıklandığı gibi küçük bir değişiklikle çalışır. eski bir git hub yayını:

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

Sonra kapsayıcıdan:

systemctl show-environment

Bu benim için mükemmel çalışıyor ve bu sadece bir geliştirme ortamı olduğundan, güvenlik sorunu benim için önemli değil.

Not: / sbin / init komutu, bu çalışmanın önemli bir parçası olan İşlem 1 olmak için / sbin / init alır.


2
2017-11-04 21:57



systemctl show-environment benim için reutrns Failed to get D-Bus connection: Unknown error -1. Konteynırı ile başladığımda --privileged yerine bayrağı --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 her zamanki gibi cevap veriyor - czerasz
@twildfarmer teşekkür ederim. Bunu deneyen herkes için de. Bunun hayata geçirildiği başka bir Docker dosyası: syslog.me/2016/03/31/an-init-system-in-a-docker-container - Vivek Kodira


Bundan geriye doğru çalışabildim: https://registry.hub.docker.com/u/codekoala/arch/ 

Docker 1.1, grupların (ro) konteynırlarda halihazırda sağlandığından bunu daha kolay hale getiriyor - Şu anda hala özel erişime ihtiyacım var, bu yüzden PrivateTmp bağdaştırıcıları oluşturabilir, ancak aksi halde, cmd'yi sistemd ikili olarak çalıştırmak için belirttiğiniz sürece - güzel çalışır.


1
2017-07-07 09:32





Şu anda sistemd, bir dizi nedene bağlı olarak bir docker konteynırında doğru bir şekilde çalışmaz, yani doğru ayrıcalıkların olmaması. Bunu docker projesindeki gibi çeşitli github sorunlarında okuyabilirsiniz. docker kemer kabininin içinde çalışan sistemd kilitleniyor veya segfaults ve init / süreç izleme ile ilgili konular. (Burada daha fazla sorunla bağlantı kurmak istiyorum, fakat görünüşe göre yeterince itibara sahip olamıyorum).

Gördüğünüz gibi, bu şu anda üzerinde çalışılan bir konu ve davranışı iyileştirmek için birkaç yamalar birleştirildi, böylece bunun çok yakında çalışmasını bekleyebiliriz.

Görünüşe göre bazı geliştiriciler, belgelenmiş oldukları için, fedora sistemlerinde çalışmaya başladı bile. kendi blogunda.


1
2017-07-24 08:08





2018 itibariyle, bu şimdi benim için çalışıyor: docker run -it -e container=docker  your-görüntü-name  /sbin/init

Bununla birlikte, bu size bir kabuk vermeyecektir, bu nedenle, daha önce yapılmamışsa, görüntünün içinde bir sistemd hizmeti (ör. Sshd) işlevini etkinleştirmeniz gerekir.


0
2018-06-09 09:40