चल systemd एक डोकर कंटेनर (आर्क लिनक्स की तरह)

मैं यह देखने की कोशिश कर रहा हूं कि क्या मैं एक डॉकर कंटेनर (जो कंटेनर में आर्क लिनक्स चला रहा है) के अंदर सिस्टमड चला सकता हूं ।

मैं सभी क्षमताओं के साथ डॉकर शुरू करता हूं, और सीजीयूपीएस में माउंट बांधता हूं:

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

हालांकि, अगर मैं सिस्टमड बाइनरी चलाने की कोशिश करता हूं:

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

यह जानने की कोशिश करना कि सिस्टमड को चीजों को सही तरीके से कैसे शुरू किया जाए ।

यहाँ मेरे गुरु pice :D चल systemd एक गोदी श्रमिक कंटेनर के साथ ubuntu :DI मिला Ubuntu के साथ काम करने systemd के अंदर डोकर

GitHub रेपो के लिए डोकर कंटेनर systemd

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

आउटपुट:

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 viewsystem logs, "systemctl reboot" to reboot, "systemctl default" or ^D totry again to boot into default mode.root@502ec40509a5:~# exit

अपडेट 2021

डॉकर अपस्ट्रीम रेपो जैसी विभिन्न परियोजनाओं के लिए बहुत सारे पैच प्रस्तुत किए गए REDHAT.To अधिक स्पष्ट रहें मेरे फ्रिंड डेविड वाल्श @ रेडहैट ने भी इसके बारे में बहुत कुछ पोस्ट किया । https://developers.redhat.com/blog/author/rhatdan/.

अतिरिक्त विशेषाधिकारों के बिना सिस्टमड चलाना आवश्यक है

/run के रूप में एक tmpfs पर./sys/fs/cgroup पढ़ें / केवल./sys/fs/cgroup/systemd पढ़ें / लिखें।/etc/machine-id की जरूरत है शामिल करने के लिए एक Uniqe MachineIDSIGRTMIN+3 स्टॉपसिग्नल के रूप में सिग्टर्म काम नहीं करेगा/var/log/journal यदि यह मौजूद नहीं है तो यह स्मृति को लिख देगा

docker run -d \     --tmpfs /tmp \    --tmpfs /run \    -v /sys/fs/cgroup:/sys/fs/cgroup:ro \    --stop-signal SIGRTMIN+3 \    httpd /sbin/init

नोट: जब आपके डॉकरफाइल में स्टॉपसिग्नल ध्वज को गिराया जा सकता है STOPSIGNAL SIGRTMIN+3

पूरी पोस्ट देखें। https://developers.redhat.com/blog/2016/09/13/running-systemd-in-a-non-privileged-container/

नोट: आज पॉडमैन के साथ यह यहां इसके बारे में और भी सरल पढ़ा जाएगा:https://developers.redhat.com/blog/2019/04/24/how-to-run-systemd-in-a-container/

डॉकर कंटेनर में सिस्टमड चलाने के लिए, मेजबान प्रणाली भी चलाने systemd. इसका मतलब है कि आप होस्ट के रूप में उबंटू और लेफ्टिनेंट; 16.04 का उपयोग नहीं कर सकते ।

वर्तमान में सिस्टमड एक डॉकर कंटेनर के भीतर सही ढंग से नहीं चलता है, कारणों के एक पूरे सेट के कारण, यानी सही विशेषाधिकारों की कमी । आप उस पर डॉकर प्रोजेक्ट पर विभिन्न प्रकार के गिटहब मुद्दों को पढ़ सकते हैं जैसे चल systemd के अंदर डोकर आर्क कंटेनर लटकी हुई है या segfaults और इनिट/प्रक्रिया निगरानी के संबंध में संबंधित मुद्दे । (मैं यहां और मुद्दों को जोड़ना चाहूंगा, लेकिन मैं ऐसा नहीं कर सकता क्योंकि मेरे पास स्पष्ट रूप से पर्याप्त प्रतिष्ठा नहीं है) ।

जैसा कि आप देख सकते हैं, यह एक ऐसा विषय है जिस पर वर्तमान में काम किया जा रहा है और व्यवहार में सुधार के लिए कुछ पैच पहले ही विलय कर दिए गए हैं, ताकि हम उम्मीद कर सकें कि यह बहुत जल्द काम करेगा ।

जाहिरा तौर पर कुछ डेवलपर्स पहले से ही इसे फेडोरा सिस्टम पर चलाने में कामयाब रहे, जैसा कि उन्होंने दस्तावेज किया है उनके ब्लॉग में.

2018 तक, यह अब मेरे लिए काम करता है: docker run -it -e container=docker आपका-छवि-नाम /sbin/init

यह आपको एक शेल नहीं देगा, हालांकि, आपको पहले कुछ सिस्टमड सेवा (जैसे एसएसएचडी) को छवि के अंदर सक्षम करना होगा यदि वह पहले से ही नहीं किया गया है, तो कुछ भी उपयोगी करने के लिए ।

डेबियन में ऐसा करने का प्रयास करते समय यह प्रश्न मिला:8 आधिकारिक कंटेनर । आधिकारिक डेबियन पर ऐसा करने की कोशिश करने वाले किसी और के लिए:8 (डेबियन:जेसी) कंटेनर, @फ्रैंक-से-डीएसपीईडी का जवाब एक मामूली संशोधन के साथ काम करता है जैसा कि वर्णित है एक git हब पोस्ट:

docker run -d \    -v /sys/fs/cgroup:/sys/fs/cgroup:ro \    --cap-add SYS_ADMIN \    debian:jessie  /sbin/initdocker exec -it <your-new-container-name-or-ID> bash

फिर कंटेनर में से:

systemctl show-environment

यह मेरे लिए पूरी तरह से काम करता है और चूंकि यह केवल एक विकास वातावरण है, सुरक्षा मुद्दा मेरे लिए कोई मायने नहीं रखता है ।

नोट:/एसबीआईएन /इनिट कमांड को प्रोसेस 1 होने के लिए/एसबीआईएन / इनिट मिलता है, जो इस काम को करने का एक महत्वपूर्ण हिस्सा है ।

मैं इससे पीछे की ओर काम करने में सक्षम था: https://registry.hub.docker.com/u/codekoala/arch/

डोकर 1.1 बनाता है यह आसान के रूप में समूहों (ro) पहले से ही प्रदान की कंटेनर में - मैं अभी भी वर्तमान की जरूरत है priv का उपयोग कर सकते हैं तो यह बनाने PrivateTmp mounts के हैं, लेकिन अन्यथा, के रूप में लंबे समय के रूप में आप निर्दिष्ट करें अध्यक्ष तथा प्रबंध निदेशक को चलाने के लिए के रूप में systemd बाइनरी - यह काम करता है अच्छी तरह से.

आप एक डॉकर कंटेनर के अंदर सिस्टमड चला सकते हैं । होस्ट ओएस कोई फर्क नहीं पड़ता, हालांकि आपको होस्ट /एसवाईएस/एफएस/सीग्रुप वॉल्यूम को माउंट करने की आवश्यकता होगी । मुझे यह इस गाइड के बाद काम करने के लिए मिला: http://developerblog.redhat.com/2014/05/05/running-systemd-within-docker-container/

क्या आप समझा सकते हैं कि आपको सिस्टमड की आवश्यकता क्यों है?

‘सिस्टमड’ मैन पेज शुरू करने के लिए एक अच्छी जगह होगी । गूगल डॉकर के तहत सिस्टमड चलाने के बारे में कई लेख भी देता है ।