Bir docker konteyneri içinde sistemd çalıştırılıyor (arch linux)


12

Ben bir docker konteyner (konteyner arch linux konteyner çalıştıran) içinde systemd çalıştırmak olup olmadığını görmek için çalışıyorum.

Docker'ı tüm özelliklerle başlatıyorum ve bağları cgroups'ta bağlıyorum:

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

Ancak, ben systemd ikili çalıştırmak için çalışırsanız:

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

Olayları sistemd'e doğru şekilde nasıl başlatacağınızı bulmaya çalışmak başlar.


systemdAdam sayfası başlamak için iyi bir yer olurdu. Google ayrıca dock altında systemd'yi çalıştırmakla ilgili çeşitli makaleler de sunar.
larsks

Neden systemd'e ihtiyacınız olduğunu açıklar mısınız?
030

Yanıtlar:


4

Systemd'yi bir Docker kapsayıcısında çalıştırmak için, ana bilgisayar sisteminin de systemd'yi çalıştırması gerekir. Bu, ana bilgisayar olarak Ubuntu'yu kullanamayacağınız anlamına gelir. Şu anda bu çalışmayı bildiğim tek ana bilgisayar dağıtımları Fedora (Ubuntu'nun aksine Docker'ın en son sürümüne sahip) veya RHEL 7'dir.


4
Arch Linux ayrıca systemd kullanır.
Jason Antman

8
16.04 itibarıyla ubuntu varsayılan olarak systemd kullanıyor
Scott Stensland

4

İşte benim master pice: D ubuntu ile bir docker konteyner içinde systemd çalışan: D I Ubuntu docker içinde systemd ile çalışma var

Docker-systemd konteynırım 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

6
Teknik olarak bu işe yarıyor, ancak bunu yapmak için kabın 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 bayrağı ile thuis daha kolay
google-frank-dspeed

2

Şu anda systemd, bir dizi nedenden ötürü, yani doğru ayrıcalıkların bulunmaması nedeniyle bir docker konteyneri içinde doğru şekilde çalışmıyor. Docker projesinde docker kemer konteyneri askıda kalıyor veya segfaultlar ve init / süreç izleme ile ilgili konular gibi çeşitli github konularında bunu okuyabilirsiniz . (Burada daha fazla sorun bağlamak istiyorum, ancak görünüşe göre yeterince itibarım yok gibi).

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

Görünüşe göre bazı geliştiriciler , bloglarında belgeledikleri gibi, fedora sistemlerinde çalıştırmayı başardı .


2

Systemd'i docker konteynerinin içinde çalıştırabilirsiniz. Ana bilgisayarın işletim sistemi önemli değildir, ancak ana bilgisayarın / sys / fs / cgroup birimini bağlamanız gerekir. Bu kılavuzu izleyerek işe başladım: http://developerblog.redhat.com/2014/05/05/running-systemd-within-docker-container/


4
ServerFault'a hoş geldiniz. Bir çözüme bağlamak yerine, lütfen cevabınızın temel noktalarını buraya ekleyin. Bu şekilde, bağlantı hedefi kaybolursa yanıtınız yine de yararlı olacaktır.
Andrew Schulman

Bağlantı verdiğiniz makale çok faydalı bilgiler içeriyor. Cevabınızın tamamlanması için lütfen ana işlem yapılabilir tavsiyelerini özetleyin ( /sys/fs/cgroupbahsettiğiniz ana bilgisayarın montajının yanı sıra ).
Amir

Ve işte yararlı bilgiler içeren bir takip makalesi: developers.redhat.com/blog/2016/09/13/…
Amir

1

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

Docker 1.1, gruplarda (ro) zaten kaplarda sağlandığından bunu kolaylaştırır - Şu anda PrivateTmp bağları oluşturabilmesi için özel erişime ihtiyacım var, ancak aksi takdirde, sistemd ikili olarak çalışacak cmd'yi belirttiğiniz sürece - güzel çalışıyor.


1

Debian: 8 resmi kapsayıcısında yapmaya çalışırken bu soruyu buldu. Bunu resmi debian: 8 (debian: jessie) konteynerinde yapmaya çalışan herkes için, @ Frank-from-DSPEED'in yanıtı , eski bir git hub yayınında açıklandığı gibi küçük bir değişiklikle çalışır :

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 konteynerden:

systemctl show-environment

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

Not: / sbin / init komutu, / sbin / init komutunun bu çalışmanın önemli bir parçası olan İşlem 1 olmasını sağlar.


1
systemctl show-environmentbenim için geriler Failed to get D-Bus connection: Unknown error -1. Konteyneri ( ) --privilegedyerine bir bayrakla başlattığımda systemctl her zamanki gibi yanıt veriyor--cap-add SYS_ADMINdocker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name=ubuntu_systemd_test debian:jessie /sbin/init
czerasz

@twildfarmer teşekkür ederim. Ayrıca bunu deneyen herkes için. Bunun uygulandığı bir başka Dockerfile: syslog.me/2016/03/31/an-init-system-in-a-docker-container
Vivek Kodira

0

2018 itibariyle, bu benim için çalışıyor: docker run -it -e container=docker resminizin adı /sbin/init

Bununla birlikte, bu size bir kabuk vermeyecektir, bu nedenle, yararlı bir şey yapmak için önce görüntünün içinde bazı sistemd hizmetini (örn. Sshd) etkinleştirmeniz gerekir.


Bunun için hangi görüntüyü kullandığınız hakkında ayrıntılı bilgi verebilir misiniz? Ubuntu, Debian, Arch, Alpine ve OpenSUSE'yi denedim ve hiçbiri çalışmıyor. İkili mevcut değil veya init kaynakları açamıyor.
Ocak'ta
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.