कोरर पर बूट पर डॉकटर डेमॉन शुरू नहीं होता है


23

मेरे पास CoreOS (835.9.0) का वेनिला इंस्टॉलेशन है और यह स्टार्टअप पर डॉक डेमॉन को शुरू नहीं करता है। यह केवल तभी शुरू होता है जब मैं SSH में होता हूं और उदा docker ps

मैं कैसे कर सकता हूँ docker डेमॉन स्वचालित रूप से सिस्टम बूट पर शुरू होता है?

जब मैं कहता हूं कि डेकर डेमॉन है, तो मेरा मतलब ps -ef | grep dockerहै कि मैं करने के बाद तक कोई प्रक्रिया नहीं दिखाताdocker ps

जवाबों:


40

sudo systemctl enable docker चाल चली।


2
धन्यवाद, और मैंने डॉकर डॉक्स को पढ़ा और मदद के लिए कुछ भी नहीं खोज सका - मुझे पुनरारंभ नीतियों के बारे में बहुत कुछ मिला, लेकिन निश्चित रूप से वे केवल एक बार डॉक डेमॉन शुरू होने पर लागू होते हैं।
क्रिस

6
बैकग्राउंड: इसका मूल कारण यह है कि docker कोरओएस पर सक्रिय सॉकेट है, अर्थात यह बूट चेन को ब्लॉक नहीं करता है। जब आप डिस्क पर बहुत सारे कंटेनरों को रोकते हैं, तो डॉकटर के शुरुआती संस्करण धीमी गति से शुरू होते थे, जो डॉकटर पर निर्भर सब कुछ को जल्दी से शुरू करने से रोकते थे, जिससे कुछ दिलचस्प विफलताएं होती थीं।
रोब

4
अच्छाई। इसने मुझे पागल कर दिया। ऐसा कुछ भी नहीं जो मैंने किसी भी डॉक्स में पढ़ा हो। मैंने लगभग AWS AMI के पक्ष में CoreOS को शपथ दिलाई थी। (एडब्ल्यूएस एएमआई स्वचालित रूप से डॉकर डेमन को डिफ़ॉल्ट रूप से शुरू करता है)।
Nostalg.io

2
CoreOS के लिए इस तरह का व्यवहार करना बहुत ही असामान्य है, यह देखते हुए कि CoreOS एक समर्पित डॉकटर OS है और यह दो साल के दौरान डॉकटर शुरू नहीं कर रहा है।
टाइपेलोजिक

3
यह गंभीर रूप से महत्वपूर्ण जानकारी है। CoreOS डॉक्स ने डॉकर (या उस मामले के लिए किसी अन्य कंटेनर रनटाइम) को सक्षम करने के बारे में कुछ भी उल्लेख नहीं किया है। चूंकि नंगे कोरओएस (और कोरओएस कंटेनर चलाने के लिए बनाया गया है) पर डॉक कंटेनर शुरू करना संभव है, मैं इस धारणा के तहत था कि डिफ़ॉल्ट था। मुझे केवल अपनी गलती का एहसास हुआ जब पहली अपडेट-ट्रिगर रिबूट ने मेरे कंटेनरों को शुरू नहीं किया।
फ्लोरियन वॉन स्टॉश

6

यह अब थोड़ा पुराना है, लेकिन मैंने सभी नए सर्वरों पर ऐसा करने के लिए क्लाउड-इनिट का उपयोग करना शुरू कर दिया है। मेरे पास एक सहेजा हुआ क्लाउड-इनिट स्क्रिप्ट है जो मैं अपने सभी सर्वरों के लिए उपयोग करता हूं। इसके भाग में शामिल हैं:

#cloud-config
coreos:
  units:
    - name: "docker.service"
      command: "start"
      enable: true

यह डॉकटर सेवा को सक्षम करेगा और इसे पहले और प्रत्येक बूट पर शुरू करेगा।


2

पहले से ही में समझाया इस टिप्पणी से रोब , डोकर सॉकेट सक्रिय है। इसका मतलब है कि जब तक बुलाया नहीं जाता तब तक बहरा शुरू नहीं होता। यहां मौजूदा जवाब काम करते हैं, लेकिन कोरओएस एक अलग दृष्टिकोण की सिफारिश करता है।

कोरोस डॉक्यूमेंटेशन के अनुसार, ऐसा करने का अनुशंसित तरीका आपके स्वयं के ऐप के लिए एक सेवा तैयार करना है, जिसके लिए डॉकर सेवा की आवश्यकता है:

/etc/systemd/system/myapp.service:

[Unit]
Description=MyApp
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill busybox1
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --name busybox1 busybox /bin/sh -c "trap 'exit 0' INT TERM; while true; do echo Hello World; sleep 1; done"

[Install]
WantedBy=multi-user.target

और क्या यह सेवा इसके बजाय स्वचालित रूप से शुरू होती है:

$ sudo systemctl enable /etc/systemd/system/myapp.service
$ sudo systemctl start hello.service

उदाहरण का उपयोग मामला सेवा शुरू होने के बाद कंटेनर को नवीनतम संस्करण में अपडेट करने के लिए होता है और उन्नत उदाहरण भी सेवा को सेवा में पंजीकृत करता है। अधिक पृष्ठभूमि की जानकारी के लिए CoreOS प्रलेखन पढ़ें ।


कि कोर से "नवीनतम" है? डॉकर ने वर्षों से नीतियों को फिर से शुरू किया है और यह दृष्टिकोण अब आवश्यक या वांछनीय नहीं है। यह वास्तव में कभी भी वांछनीय नहीं था, लेकिन यह खुद को पुनः आरंभ करने के लिए डॉकर के समर्थन की कमी के लिए (बहुत पुराने संस्करणों के लिए) एक समाधान था। लांग पिछले समय CoreOS का उपयोग कर, मुझे लगता है ... रोकने के लिए
माइकल हैम्पटन

@ मिचेल हैम्पटन रीस्टार्ट नीतियां तब भी लागू होती हैं जब कंटेनर किसी अन्य कारण से दुर्घटनाग्रस्त हो जाता है, इसलिए एक दूसरे के लिए प्रतिस्थापन नहीं है। इसके अलावा, पुनरारंभ नीतियां आपको बूट पर कंटेनर को अपडेट करने की अनुमति नहीं देती हैं, आदि। मुझे नहीं पता कि कौन सा बेहतर है, लेकिन मुझे लगता है कि यह विधि आपको थोड़ा और नियंत्रण देती है।
Neograph734

1
जब आपको उस नियंत्रण की आवश्यकता पड़ने लगती है, तो आपको आम तौर पर कई अन्य बिट्स की आवश्यकता होती है जो ऑर्केस्ट्रेशन सेवाओं द्वारा प्रदान की जाती हैं: सरल अंत डॉकटर-कंपोज़ में, कुबेरनेट्स तक।
माइकल हैम्पटन

1

मैं डॉकर झुंड का उपयोग कर रहा हूं, इसलिए मेरे पास सिस्टेम के लिए जिम्मेदार होने के लिए एक विशिष्ट ऐप नहीं है ... मुझे बूट पर शुरू करने के लिए केवल डॉकटर की आवश्यकता है। यह समाधान है जो मैंने काम किया है।

इसे लगाएं /etc/systemd/system/poke-docker.service:

[Unit]
After=default.target

[Service]
Type=oneshot
ExecStart=/usr/bin/docker version
RemainAfterExit=yes

[Install]
WantedBy=default.target

और फिर बस systemctl enable poke-dockerइसे प्रत्येक बूट पर ट्रिगर करने के लिए सेट अप करें, स्टार्टअप अनुक्रम के अंत के पास। docker versionआदेश डोकर डेमॉन को बात करती है, सॉकेट ट्रिगर और डोकर सेवा ही शुरू।

मैंने systemctl enable dockerअन्य उत्तर में चाल की कोशिश की , और जब यह पहली बार में काम किया, तो ऐसा प्रतीत होता है कि किसी तरह की गड़गड़ाहट की झुंड स्थिति पैदा हुई है, जहां डॉकटर स्पष्ट रूप से बहुत कुछ करने की कोशिश कर रहा था और बुरी तरह से विफल हो रहा था। मुझे लगता है कि यह "बूट श्रृंखला को अवरुद्ध कर रहा है" वहां टिप्पणियों में उल्लिखित व्यवहार है।


एक ही उपयोग के मामले में एक झुंड पर गिटलैब-धावक चल रहा था। यह निश्चित रूप से डेमन को जगाता है। आप अपनी इग्निशन फ़ाइल में systemd ड्रॉप-इन जोड़ सकते हैं coreos.com/os/docs/latest/use-systemd-drop-in-units.html
drgn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.