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.
arch-linux
docker
systemd
Michael Neale
sumber
sumber
systemd
halaman manual akan menjadi tempat yang baik untuk memulai. Google juga menghasilkan beberapa artikel tentang menjalankan systemd di bawah buruh pelabuhan.Jawaban:
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.
sumber
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
Keluaran:
sumber
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 .
sumber
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/
sumber
/sys/fs/cgroup
, yang telah Anda sebutkan).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.
sumber
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 :
Kemudian dari dalam wadah:
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.
sumber
systemctl show-environment
reutrns untuk sayaFailed to get D-Bus connection: Unknown error -1
. Ketika saya memulai wadah dengan--privileged
bendera 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 biasaPada 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.
sumber