2016-11-08 6 views
5

मैं एक डॉकर रूकी हूं इसलिए नीचे अवधारणाओं और शब्दावली का मेरा उपयोग त्रुटिपूर्ण हो सकता है।क्या अलग मोड में डॉकर कंटेनर शुरू करने का कोई तरीका है?

मुझे लगता है कि मैं एक कंटेनर बनाने (docker create के माध्यम से) की धारणा को समझता हूं, और एक कंटेनर शुरू करने के लिए (docker start के माध्यम से) शुरू करता हूं। मैं कम स्पष्ट रूप से भी समझता हूं लेकिन अभी भी कुछ हद तक docker run का उपयोग एक कंटेनर बनाने और चलाने के लिए किया जाता है। अगर मैं गलत हूं तो मुझे सही करो।

जब तक मैं कुछ याद नहीं करता, अगर मैं एक कंटेनर शुरू करना चाहता हूं ताकि यह अलग हो, मेरा एकमात्र विकल्प docker run -d है।

जो मुझे समझ में नहीं आता है: मान लीजिए कि मैंने पहले ही अपना कंटेनर बनाया है, और यह बंद हो गया है, और अब मैं इसे अलग करना चाहता हूं। मैं उसको कैसे करू? या यह इसके बारे में सोचने का गलत तरीका है?

मैं दो बार आदेश नीचे का उपयोग कर कंटेनर को चलाने के लिए कोशिश कर रहा द्वारा इस वैचारिक गलतफहमी (मुझे यकीन है कि यह क्या है है हूँ) में भाग:
docker -d --name=fred my/image

दूसरी बार मुझे मिल गया:

डॉकर: डेमन से त्रुटि प्रतिक्रिया: संघर्ष। नाम "/ image" पहले से ही कंटेनर द्वारा उपयोग में है [...]

ठीक; अब मैं समझता हूं कि यह एक ही नाम के साथ दो कंटेनर बनाने की कोशिश करता है जो स्पष्ट रूप से नहीं हो सकता है। लेकिन इससे मुझे इस वैचारिक प्रश्न का सामना करना पड़ा: यदि मेरे पास एक कंटेनर है जो कहता है, रोका, तो मैं इसे अलग मोड में कैसे शुरू कर सकता हूं?

मैंने आपको बताया कि मैं एक रूकी था। किसी भी जानकारी के लिए धन्यवाद।

उत्तर

4

जब तक आप विशेष रूप से देते हैं (-एक या मैं विकल्प) जब आप कंटेनर शुरू, परिभाषा के द्वारा आप dettached कर रहे हैं।

एक कंटेनर बनाना बस फाइल सिस्टम परत बनाता है। इसे शुरू करने से एंटरपॉइंट (या सीएमडी) प्रक्रिया चलती है। रन बनाते हैं और शुरुआत करते हैं, जैसा कि आपने अनुमान लगाया है। तो आप किसी बनाए गए कंटेनर को "संलग्न" नहीं कर सकते ... इसमें संलग्न करने की कोई प्रक्रिया नहीं है।

[[email protected] ~]$ docker create --name=test centos:latest /bin/sh -c "while true; do echo hello world; sleep 1; done" 

यह देखें:

यहाँ मैं एक कंटेनर बनाने (फिर से, यह सब करता है फाइल सिस्टम परत बनाने है)?

[email protected] ~]$ docker ps -a 
CONTAINER ID  IMAGE     COMMAND     CREATED    STATUS      PORTS    NAMES 
9d5bf75a8077  centos:latest   "/bin/sh -c 'while tr" 15 seconds ago  Created          test 

यह अभी तक कुछ भी नहीं कर रहा है। अब इसे संलग्न किए बिना शुरू करें, टर्मिनल STDOUT को कुछ भी मुद्रित नहीं किया गया है, क्योंकि मैं संलग्न नहीं हूं। लेकिन STDOUT लॉग-ड्राइवर (जेसन-फाइल)

[[email protected] ~]$ docker start test test 
[[email protected] ~]$ docker logs test 
hello world 
hello world 
hello world 
hello world 
+1

वाह, क्षमा करें, मेरा स्वरूपण भयानक है। –

+1

जेम्स, अब आपके उत्तर को स्वरूपित किया गया है। प्रश्न का उत्तर देते समय आप सहायता लिंक प्राप्त कर सकते हैं जिसे आप आगे बढ़कर शुरू कर सकते हैं। :) – Rao

+0

धन्यवाद राव, मैंने मदद देखा और बैकटीक्स का उपयोग करने की कोशिश की। मैंने भी कोशिश की है लेकिन इसे सबमिट नहीं किया क्योंकि यह "पूर्वावलोकन" में सही नहीं दिख रहा था। बस मुझे शुरू करने के लिए ... आप मेरे ब्लॉक पर किस सीमा का उपयोग करते थे? –

0

यहां बताया गया है कि यह कैसे काम करता है।

चल रहा है एक डोकर कंटेनर busybox, अलग मोड और कंटेनर नाम की एक छोटी सी linux छवि है testso

bash $ docker run -itd --name testso busybox 
b60d0847bb81065d5f5d4b3a3acff3102d03e7a8a084c0770da4487427787479 

आप चल रहे कंटेनर

bash $ docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES 
b60d0847bb81  busybox    "sh"    7 seconds ago  Up 2 seconds       testso 

अब ऊपर कंटेनर रोक देख सकते हैं testso और जांचें कि कोई कंटेनर चल रहा है।

bash $ docker stop testso 
testso 
bash $ docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES 

अब, अपने प्रश्न पहले बंद कर दिया कंटेनर testso शुरू करने से को संबोधित किया और कंटेनर पृष्ठभूमि में चल रहा है देखते हैं।

bash $ docker start testso 
testso 
bash $ docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES 
b60d0847bb81  busybox    "sh"    46 seconds ago  Up 2 seconds       testso 

तो, जब कंटेनर docker run-d साथ विकल्प है पहले, कंटेनर सिर्फ docker start containerid का उपयोग जो स्वचालित रूप से अलग मोड में चला सकते हैं।

आशा है कि यह सहायक होगा।

अद्यतन: दूसरी बार के लिए चल रहा है के बारे में, के रूप में आप ठीक ही बताया दो विकल्प हैं और इससे बाहर:

  1. के बजाय कमांड docker run --name=mycontainer image का उपयोग कर इसे चलाने, तो आप सिर्फ मौजूदा कंटेनर शुरू हो सकता है आप जो बस कोशिश कर रहा है और उपर्युक्त उत्तर मदद करता है।
  2. मौजूदा कंटेनर को मिटाएं और docker run --name=mycontainer image को फिर से चलाएं।
    आपके पास वर्तमान कंटेनर मिटाने के लिए, आदेश का उपयोग करें - docker rm -f mycontainer
+0

लेयरड पर जा रहा है, क्या आप कृपया जांच लेंगे कि उपर्युक्त उत्तर बेहतर समझने में मदद करता है या नहीं? और क्या यह आपके पास समस्या का समाधान करता है? – Rao

संबंधित मुद्दे