Menjalankan systemd di dalam wadah buruh pelabuhan (arch linux)

12

Saya mencoba untuk melihat apakah saya dapat menjalankan systemd di dalam wadah buruh pelabuhan (yang menjalankan linux lengkungan dalam wadah).

Saya memulai buruh pelabuhan dengan semua kemampuan, dan mengikat mount di cgroup:

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

namun, jika saya mencoba menjalankan biner systemd:

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

Mencoba mencari tahu bagaimana memasukkan hal-hal dengan benar ke systemd dimulai.

Michael Neale
sumber
The systemdhalaman manual akan menjadi tempat yang baik untuk memulai. Google juga menghasilkan beberapa artikel tentang menjalankan systemd di bawah buruh pelabuhan.
larsks
Bisakah Anda menjelaskan mengapa Anda membutuhkan systemd?
030

Jawaban:

4

Untuk menjalankan systemd dalam wadah Docker, sistem host juga harus menjalankan systemd. Ini berarti Anda tidak dapat menggunakan Ubuntu sebagai tuan rumah. Saat ini satu-satunya distribusi host yang saya tahu pekerjaan itu adalah Fedora (yang, tidak seperti Ubuntu, memiliki versi terbaru dari Docker) atau RHEL 7.

Michael Hampton
sumber
4
Arch Linux juga menggunakan systemd.
Jason Antman
8
ubuntu pada 16.04 menggunakan systemd secara default
Scott Stensland
4

Di sini master pice saya: D menjalankan systemd di dalam sebuah docker container dengan ubuntu: D I Got Ubuntu bekerja dengan systemd di dalam docker

GitHub Repo untuk kontainer docker-systemd saya

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

Keluaran:

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
google-frank-dspeed
sumber
6
Secara teknis ini berfungsi, tetapi Anda harus merusak keamanan penampung untuk melakukannya. Ini tidak sesuai untuk penyebaran produksi.
Michael Hampton
Hari ini mungkin lebih mudah dengan lebih sedikit bendera keamanan
google-frank-dspeed
2

Saat ini systemd tidak berjalan dengan benar dalam wadah buruh pelabuhan, karena serangkaian alasan, yaitu kurangnya hak yang benar. Anda dapat membaca tentang itu dalam berbagai masalah github pada proyek buruh pelabuhan seperti menjalankan systemd di dalam wadah lengkungan dock hang atau segfaults dan masalah terkait mengenai pemantauan init / proses. (Saya ingin menghubungkan lebih banyak masalah di sini, tetapi saya tidak bisa karena saya tampaknya tidak memiliki reputasi yang cukup).

Seperti yang Anda lihat, ini adalah topik yang saat ini sedang dikerjakan dan beberapa tambalan telah digabungkan untuk meningkatkan perilaku, sehingga kami dapat berharap ini bekerja segera.

Rupanya beberapa pengembang sudah berhasil menjalankannya pada sistem fedora, seperti yang telah mereka dokumentasikan di blog mereka .

Alexander Jung-Loddenkemper
sumber
2

Anda dapat menjalankan systemd di dalam wadah buruh pelabuhan. OS host tidak masalah, meskipun Anda perlu me-mount volume host / sys / fs / cgroup. Saya mulai bekerja dengan mengikuti panduan ini: http://developerblog.redhat.com/2014/05/05/running-systemd-within-docker-container/

Tony H
sumber
4
Selamat datang di ServerFault. Alih-alih menautkan ke solusi, harap sertakan poin penting di sini dalam jawaban Anda. Dengan begitu jawaban Anda akan tetap berguna jika target tautan hilang.
Andrew Schulman
Artikel yang Anda tautkan berisi informasi yang sangat berguna. Agar jawaban Anda lengkap, mohon rangkum saran-saran utama yang dapat ditindaklanjuti (selain memasang host /sys/fs/cgroup, yang telah Anda sebutkan).
Amir
Dan di sini ada artikel lanjutan dengan informasi berguna lebih lanjut: developers.redhat.com/blog/2016/09/13/…
Amir
1

Saya dapat bekerja mundur dari ini: https://registry.hub.docker.com/u/codekoala/arch/

Docker 1.1 menjadikan ini lebih mudah karena grup (ro) sudah disediakan dalam wadah - Saat ini saya masih memerlukan akses priv sehingga dapat membuat tunggangan PrivateTmp, tetapi sebaliknya, selama Anda menentukan cmd untuk dijalankan sebagai biner systemd - ia berfungsi dengan baik.

Michael Neale
sumber
1

Ditemukan pertanyaan ini ketika mencoba melakukan ini di debian: 8 wadah resmi. Bagi siapa pun yang mencoba melakukan ini pada wadah debian: 8 (debian: jessie) resmi, jawaban @ Frank-from-DSPEED bekerja dengan sedikit modifikasi seperti dijelaskan dalam posting hub git yang lebih lama :

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

Kemudian dari dalam wadah:

systemctl show-environment

Ini berfungsi dengan baik untuk saya dan karena ini hanya lingkungan pengembangan, masalah keamanan tidak masalah bagi saya.

Catatan: Perintah / sbin / init menjadikan / sbin / init sebagai Proses 1, yang merupakan bagian penting dari pembuatan ini.

petani anak
sumber
1
systemctl show-environmentreutrns untuk saya Failed to get D-Bus connection: Unknown error -1. Ketika saya memulai wadah dengan --privilegedbendera bukannya --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 merespons seperti biasa
czerasz
@twildfarmer terima kasih. Juga untuk siapa pun yang mencoba ini. Dockerfile lain yang telah diimplementasikan adalah: syslog.me/2016/03/31/an-init-system-in-a-docker-container
Vivek Kodira
0

Pada 2018, ini sekarang berfungsi untuk saya: docker run -it -e container=docker nama-gambar-Anda /sbin/init

Ini tidak akan memberi Anda shell, jadi Anda harus terlebih dahulu mengaktifkan beberapa layanan systemd (misalnya sshd) di dalam gambar jika itu belum dilakukan, untuk melakukan sesuatu yang bermanfaat.

Robin Green
sumber
Bisakah Anda memberikan detail gambar apa yang Anda gunakan untuk ini? Saya sudah mencoba Ubuntu, Debian, Arch, Alpine dan OpenSUSE dan tidak ada yang berfungsi. Entah biner tidak ada atau init gagal membuka sumber daya.
Kode Bling