डॉकटर कंटेनर के अंदर रनिंग सिस्टमड (आर्च लाइन)


12

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

मैं सभी क्षमताओं के साथ काम करना शुरू करता हूं, और cgroups में माउंट बांधता हूं:

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.

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


systemdआदमी पेज एक अच्छी जगह शुरू करने के लिए किया जाएगा। Google भी docker के तहत systemd चलाने के बारे में कई लेख प्रस्तुत करता है।
लार्क्स जूल

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

जवाबों:


4

डॉकटर कंटेनर में सिस्टमड चलाने के लिए, होस्ट सिस्टम को सिस्टमड भी चलाना होगा। इसका मतलब है कि आप मेजबान के रूप में उबंटू का उपयोग नहीं कर सकते हैं। इस समय एकमात्र मेजबान वितरण जो मुझे पता है कि काम फेडोरा हैं (जो उबंटू के विपरीत, डॉकर का नवीनतम संस्करण है) या आरएचईएल 7।


4
आर्क लिनक्स सिस्टमड का भी उपयोग करता है।
जेसन एंटमैन

8
16.04 के रूप में ubuntu डिफ़ॉल्ट रूप से
सिस्टमड

4

यहाँ मेरा मास्टर पाइस: ubuntu के साथ एक डॉक कंटेनर के अंदर डी रनिंग सिस्टमड: डी आइकॉट उबंटू डॉकटर के अंदर सिस्टेम के साथ काम कर रहा है

मेरे डॉकटर-सिस्टमड कंटेनर के लिए गिटहब रेपो

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

6
तकनीकी रूप से यह काम करता है, लेकिन आपको इसे करने के लिए कंटेनर की सुरक्षा को तोड़ना पड़ा। यह उत्पादन परिनियोजन के लिए उपयुक्त नहीं है।
माइकल हैम्पटन

आज कम सुरक्षा झंडे के साथ thuis और अधिक आसान है
google-frank-dspeed

2

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

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

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


2

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


4
ServerFault में आपका स्वागत है। किसी समाधान से लिंक करने के बजाय, कृपया अपने उत्तर में यहां के आवश्यक बिंदुओं को शामिल करें। इस तरह से आपका उत्तर तब भी उपयोगी होगा जब लिंक लक्ष्य दूर हो जाएगा।
एंड्रयू शुलमैन

आपके द्वारा लिंक किया गया लेख बहुत उपयोगी जानकारी है। आपके उत्तर के पूर्ण होने के लिए, कृपया इसकी मुख्य कार्रवाई योग्य सलाह (मेजबान के बढ़ते हुए /sys/fs/cgroup, जिसका आपने उल्लेख किया है) को संक्षेप में प्रस्तुत करें ।
आमिर

और यहाँ आगे उपयोगी जानकारी के साथ एक अनुवर्ती लेख है: Developers.redhat.com/blog/2016/09/13/…
Amir

1

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

डॉकर 1.1 इसे आसान बनाता है क्योंकि समूह (आरओ) पहले से ही कंटेनरों में प्रदान किए जाते हैं - मुझे अभी भी निजी एक्सेस की आवश्यकता है ताकि यह प्राइवेटटैम्प माउंट बना सके, लेकिन अन्यथा, जब तक आप cmd को सिस्टम बाइनरी के रूप में चलाने के लिए निर्दिष्ट करते हैं - यह अच्छी तरह से काम करता है।


1

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

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

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

systemctl show-environment

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

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


1
systemctl show-environmentमेरे लिए reutrns Failed to get D-Bus connection: Unknown error -1। जब मैं कंटेनर को एक --privilegedझंडे के बजाय शुरू करता हूं --cap-add SYS_ADMIN( docker run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name=ubuntu_systemd_test debian:jessie /sbin/init)
सिस्टमक्टेल

@Wildfarmer धन्यवाद। किसी और के लिए भी जो यह कोशिश करता है। एक और डॉकफाइल जिसे यह लागू किया गया है: syslog.me/2016/03/31/an-init-system-in-a-docker-container
विवेक कोदिरा

0

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

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


क्या आप इस बात का विवरण दे सकते हैं कि आप किस छवि का उपयोग कर रहे हैं? मैंने उबंटू, डेबियन, आर्क, अल्पाइन और ओपनएसयूएस की कोशिश की है और उनमें से कोई भी काम नहीं करता है। या तो बाइनरी मौजूद नहीं है या यह init संसाधनों को खोलने में विफल रहता है।
कोडबलिंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.