डॉकटर - कंटेनर नहीं चल रहा है


92

मैं पूरी तरह से नौसिखिया हूँ। मैंने इस तरह से एक बाहर निकलने वाले कंटेनर को शुरू करने की कोशिश की,

  1. मैंने सभी उपलब्ध कंटेनरों को नीचे सूचीबद्ध किया है docker ps -a। यह निम्नलिखित सूचीबद्ध है:

    docker सभी छवियों को सूचीबद्ध करें

  2. मैंने कंटेनर को शुरू करने के लिए निम्नलिखित आदेशों को दर्ज किया जो बाहर चरण में है और उस छवि के टर्मिनल में प्रवेश करता है।

    docker start 79b3fa70b51d
    docker exec -it 79b3fa70b51d /bin/sh
    
  3. यह निम्न त्रुटि है।

    FATA[0000] Error response from daemon: Container 79b3fa70b51d is not running

लेकिन जब मैं कंटेनर का उपयोग शुरू करता हूं docker start 79b3fa70b51d। यह कंटेनर आईडी को आउटपुट के रूप में फेंकता है जो सामान्य है अगर इसमें सब कुछ सामान्य रूप से काम करता है। मुझे यकीन नहीं है कि इस त्रुटि का क्या कारण है। इसके कारणों और सुझावों के बारे में कोई भी विचार मेरे लिए बहुत उपयोगी होगा। अग्रिम में धन्यवाद।


7
नमस्ते, क्या आप बता सकते हैं कि आपने इस मुद्दे को कैसे हल किया। मुझे डर है कि नीचे दिए गए जवाब से बहुत कुछ समझ में नहीं आता
JayPex

4
@ApexFred, डॉकटर कंटेनर VMs की तरह नहीं हैं; उन्हें एक एप्लिकेशन चलाने के लिए डिज़ाइन किया गया है। जब अनुप्रयोग समाप्त हो जाता है, तो कंटेनर होता है। इस मामले में, उपयोगकर्ता ने "इको" कमांड के लिए कंटेनर के लिए "एप्लिकेशन" सेट किया है। क्योंकि "इको" कमांड एक प्रतिध्वनि करता है और फिर समाप्त हो जाता है, कंटेनर कमांड के साथ भी समाप्त होता है। यदि वह कंटेनर को फिर से शुरू करता है, तो यह प्रतिध्वनि करता है और फिर से समाप्त हो जाता है। EXEC कमांड को एक रनिंग कंटेनर की आवश्यकता होती है। क्योंकि कंटेनर समाप्त हो गया है, इसका उपयोग अतिरिक्त कमांड चलाने के लिए नहीं किया जा सकता है।
duct_tape_coder

जवाबों:


31

कंटेनर 79b3fa70b51dकेवल एक करने के लिए लगता है echo

इसका मतलब है कि यह शुरू होता है, गूंज और फिर तुरंत बाहर निकलता है।

अगला docker execआदेश उसे उस कंटेनर में संलग्न करने और किसी भी कमांड को निष्पादित करने के लिए चालू नहीं मिलेगा: यह बहुत देर हो चुकी है। कंटेनर पहले ही बाहर निकल चुका है।

docker execआदेश एक चल कंटेनर में एक नया आदेश चलाता है।

docker execकंटेनर का प्राथमिक प्रोसेस (PID 1) चल रहा है, जबकि कमांड का उपयोग करना शुरू हो जाएगा


1
हे VonC, आपकी टिप्पणी के लिए धन्यवाद। मैं छवि के टर्मिनल में जाने के लिए कैसे प्राप्त कर सकता हूं?
अजनबी

3
@Udhayakumar docker run -it --rm udhayakumar/busyboxwithtouchएक सत्र खोलने के लिए एक सरल पर्याप्त होना चाहिए। डिफ़ॉल्ट प्रविष्टि बिंदु / बिन / श होना चाहिए, लेकिन यह आपके डॉकरीफाइल पर निर्भर करता है: आपने एक अलग प्रविष्टि और / या एक अलग सीएमडी को परिभाषित किया होगा।
VonC

51
नमस्ते, क्या आप बता सकते हैं कि आपने इस मुद्दे को कैसे हल किया। मुझे डर है कि यह जवाब बहुत मायने नहीं
रखता

2
@ जवाद किसी भी पैरामीटर के बिना बिजीबॉक्सविथटच चलाकर, यह इंटरैक्टिव शेल (जो तुरंत बाहर नहीं निकलता है) के लिए डिफ़ॉल्ट है। इसका मतलब है कि आप बाद में ( docker exec) इसे संलग्न कर सकते हैं।
VonC

62

डिफ़ॉल्ट रूप से, डॉकटर कंटेनर तुरंत बाहर निकल जाएगा यदि आपके पास कंटेनर पर चलने वाला कोई कार्य नहीं है।

कंटेनर को पृष्ठभूमि में चालू रखने के लिए, इसे --detach(या -d) तर्क के साथ चलाने का प्रयास करें ।

उदाहरण के लिए:

docker pull debian

docker run -t -d --name my_debian debian
e7672d54b0c2

docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
e7672d54b0c2        debian              "bash"              3 minutes ago       Up 3 minutes                            my_debian

#now you can execute command on the container
docker exec -it my_debian bash
root@e7672d54b0c2:/# 

यही उत्तर होना चाहिए, महान।
मेरा

22

यदि मुख्य प्रक्रिया फिर से (लंबे समय तक) शुरू करना संभव नहीं है, तो commitकंटेनर में एक नई छवि और इस छवि से एक नया कंटेनर चलाने की संभावना भी है । हालांकि यह सामान्य रूप से सबसे अच्छा अभ्यास वर्कफ़्लो नहीं है , मुझे लगता है कि यह एक समय में एक बार एक असफल स्क्रिप्ट को डीबग करने के लिए उपयोगी है।

docker exec -it 6198ef53d943 bash
Error response from daemon: Container 6198ef53d9431a3f38e8b38d7869940f7fb803afac4a2d599812b8e42419c574 is not running

docker commit 6198ef53d943
sha256:ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33

docker run -it ace7ca65e6e bash
root@72d38a8c787d:/#

मैंने उसी चरण का अनुसरण किया है, लेकिन नव निर्मित कंटेनर को ब्राउज़र से सुलभ नहीं है जो पहले सुलभ था
मुहम्मद मुअज्जम

1
कृपया ध्यान दें कि कमांड bashकंटेनर में एक प्रक्रिया शुरू करता है। आपके पास शायद पहले एक वेबसर्वर चल रहा था, इसलिए आपको यह जांचना होगा कि सर्वर को वापस लाने के लिए किस कमांड का उपयोग करना होगा।
मथायस कुह्न

10

सबसे पहले, हमें डॉकटर कंटेनर शुरू करना होगा

ankit@ankit-HP-Notebook:~$  sudo docker start 3a19b39ea021

                        3a19b39ea021

उसके बाद, डॉकटर कंटेनर की जाँच करें:

ankit@ankit-HP-Notebook:~$  sudo docker ps -a

 CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS                   PORTS               NAMES

  3a19b39ea021        coreapps/ubuntu16.04:latest   "bash"              13 hours ago        
  Up 9 seconds                                 ubuntu1

  455b66057060        hello-world                   "/hello"            4 weeks ago         

Exited (0) 4 weeks ago                       vigorous_bardeen

फिर नीचे दिए गए आदेश का उपयोग करके निष्पादित करें:

ankit@ankit-HP-Notebook:~$  sudo docker exec -it 3a19b39ea021 bash

root@3a19b39ea021:/# 

यह पाठ जोड़ने में मददगार होगा जो आपके उत्तर की व्याख्या करने में मदद करता है।
लॉरेन वैन स्लॉन्ग

9

यह उन छवियों के साथ होता है जिनके लिए स्क्रिप्ट अनुरोधों की प्रतीक्षा में सेवा लॉन्च नहीं करती है , इसलिए कंटेनर स्क्रिप्ट के अंत में बाहर निकलता है।

यह आमतौर पर अधिकांश बेस ओएस छवियों (सेंटोस, डेबियन, आदि), या नोड छवियों के साथ भी होता है ।

आपकी सबसे अच्छी शर्त छवि को इंटरैक्टिव मोड में चलाना हैनोड छवि के साथ नीचे उदाहरण :

docker run -it node /bin/bash

आउटपुट है

root@cacc7897a20c:/# echo $SHELL
/bin/bash

5

यहाँ मेरे लिए क्या काम किया है।

कंटेनर आईडी प्राप्त करें और पुनः आरंभ करें।

docker ps -a --no-trunc 

ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33


docker restart ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33


3

कारण वही है जो स्वीकृत उत्तर में कहा गया है। मैं कुछ अतिरिक्त जानकारी जोड़ता हूं, जो इस मुद्दे के बारे में और समझ प्रदान कर सकता है।

  1. एक कंटेनर की स्थिति भी शामिल Created, Running, Stopped, Exited, Deadऔर दूसरों मुझे पता है।
  2. जब हम निष्पादित करते हैं docker create, docker डेमन इसकी स्थिति के साथ एक कंटेनर बनाएगा Created
  3. जब docker start, डॉकटर डेमन एक मौजूदा कंटेनर शुरू करेगा, जिसकी स्थिति Createdया हो सकती है Stopped
  4. जब हम निष्पादित करते हैं docker run, docker daemon इसे दो चरणों में पूरा करेगा: docker createऔर docker start
  5. जब docker stop, जाहिर तौर पर डॉकटर डेमन एक कंटेनर को रोक देगा। इस प्रकार कंटेनर Stoppedस्थिति में होगा ।
  6. सबसे महत्वपूर्ण एक आ रहा है, एक कंटेनर वास्तव में कल्पना करता है कि इसमें एक लंबी प्रक्रिया है। जब प्रक्रिया बाहर निकल जाती है, तो कंटेनर होल्डिंग प्रक्रिया भी बाहर निकल जाएगी। इस प्रकार इस कंटेनर की स्थिति क्या होगी Exited

प्रक्रिया कब निकलती है? दूसरे शब्द में, क्या प्रक्रिया है, हमने इसे कैसे शुरू किया?
इसका उत्तर CMDडॉकटराइल या commandनिम्नलिखित अभिव्यक्ति में है, जो कि bashकुछ छवियों में डिफ़ॉल्ट रूप से है, अर्थात ubutu: 18.04।

docker run ubuntu:18.04 [command]

3

docker run -it <image_id> /bin/bash

इंटरेक्टिव मोड रनिंग में बैश शेल चलाएं


1
मुझे लगता है कि -dझंडा यहां एक टाइपो है?

2

किसी Dockerfile का उपयोग करके कुछ इसी तरह के प्रयास के लिए ...

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

इस स्थिति में, एक वर्कअराउंड होगा: 1. परिणामी छवि को कमिट करें: (कंटेनर_नाम = उस कंटेनर का नाम जिसे आप छवि से दूर करना चाहते हैं, छवि_नाम = छवि का नाम जिसे बनाने के लिए docker प्रतिबद्ध कंटेनर_नाम image_name का उपयोग करें: नई छवि का उपयोग कर एक नया कंटेनर बनाने के लिए docker चलाएं, उस कमांड को निर्दिष्ट करें जिसे आप चलाना चाहते हैं। यहां, मैं "bash" चलाऊंगा: docker run -it image_name bash

यह आपको इंटरेक्टिव लॉग इन के लिए मिलेगा।


1

यहां एक समाधान है जब डॉकटर कंटेनर सामान्य रूप से बाहर निकलता है और आप डॉकरफाइल को संपादित कर सकते हैं।

आम तौर पर, जब एक डॉकटर कंटेनर चलाया जाता है, तो एक कमांड चलाकर एक एप्लिकेशन दिया जाता है। से Dockerfile संदर्भ ,

CMD और ENTRYPOINT निर्देश दोनों परिभाषित करते हैं कि कंटेनर चलाते समय कौन सी कमांड निष्पादित होती है। ... Dockerfile को कम से कम CMD या ENTRYPOINT कमांड निर्दिष्ट करना चाहिए।

जब आप एक छवि बनाते हैं और CMD या ENTRYPOINT के साथ कोई कमांड निर्दिष्ट नहीं करते हैं, तो आधार छवि के CMD या ENTRYPOINT कमांड को निष्पादित किया जाएगा।

उदाहरण के लिए, आधिकारिक Ubuntu Dockerfile में CMD ["/bin/bash"]( https://hub.docker.com/_/ubuntu ) है। अब, bin/bash/कमांड इनपुट स्वीकार कर सकता है और docker run -it IMAGE_IDकमांड कंटेनर में STDIN संलग्न करता है। नतीजा यह है कि आपको एक इंटरैक्टिव टर्मिनल मिलता है और कंटेनर चलता रहता है।

जब सीएमडी या एनटीआरपीओपीएनटी के साथ एक आदेश डॉकफाइल में निर्दिष्ट किया जाता है, तो कंटेनर चलाते समय इस कमांड को निष्पादित किया जाता है। अब, यदि यह कमांड बिना किसी इनपुट की आवश्यकता के पूरा हो सकता है, तो यह समाप्त हो जाएगा और कंटेनर बाहर निकल जाएगा। docker run -it IMAGE_IDहोगा नहीं इस मामले में इंटरैक्टिव टर्मिनल प्रदान करते हैं। एक उदाहरण नीचे Dockerfile से निर्मित docker की छवि होगी-

FROM ubuntu
ENTRYPOINT echo hello 

यदि आपको इस छवि के टर्मिनल पर जाने की आवश्यकता है, तो आपको एंट्रीपॉइंट कमांड को संशोधित करके कंटेनर को चालू रखना होगा।

FROM ubuntu
ENTRYPOINT echo hello && sleep infinity 

कंटेनर को सामान्य रूप से चलाने के बाद docker run IMAGE_ID, आप बस दूसरे टर्मिनल पर जा सकते हैं और docker exec -it CONTAINER_ID bashकंटेनर के टर्मिनल को प्राप्त करने के लिए उपयोग कर सकते हैं।


"और आप Dockerfile को संपादित कर सकते हैं": मुख्य बिंदु यहाँ। Upvoted।
VonC

0

मेरे मामले में, मैंने कुछ फ़ाइल नाम और निर्देशिका निर्देशिका के डॉकफाइल की निर्देशिका नाम बदल दिए हैं। जिसके कारण कंटेनर को फिर से शुरू करने के लिए आवश्यक पैरामीटर नहीं मिल रहा है।

मूल नामों पर वापस नाम बदलने के बाद, कंटेनर मक्खन की तरह शुरू हुआ।


0

मेरा इस पर एक अलग लेना है। मैं कर सकता था docker psऔर यह देख सकता था कि एक डॉकटर कंटेनर चल रहा है, मैंने इसे फिर से शुरू करने की कोशिश भी की, लेकिन जैसे ही मैंने इसके लिए एक सत्र प्राप्त करने की कोशिश की New-PSSession -ContainerId $containerId -RunAsAdministrator, यह गलत होगा।

## [त्रुटि] नई- PSSession: इनपुट कंटेनर आईडी मौजूद नहीं है, ## [त्रुटि] या संबंधित कंटेनर नहीं चल रहा है।

मेरी समस्या यह थी कि मैं नेटवर्क सेवा के साथ चल रहा था और इसमें कंटेनर को देखने के लिए पर्याप्त अनुमति नहीं थी, हालांकि मैंने इसे docker कमांड चलाने की अनुमति दी थी (docker सुरक्षा समूह कॉन्फ़िगरेशन के साथ)

मुझे नहीं पता था कि कंटेनरों के साथ काम करना कैसे संभव है, इसलिए मुझे इसके बजाय व्यवस्थापक उपयोगकर्ता के रूप में इसे चलाने के लिए वापस करना पड़ा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.