डॉकटर कंटेनर को कैसे जारी रखें जो बाहर निकल गया है


263

विचार करें:

docker run -it centos /bin/bash

मैंने इसे बाहर निकलने के लिए Ctrl+ दबाया D

मैं इस कंटेनर को चलाना जारी रखना चाहता हूं, लेकिन मैंने पाया कि मैं नहीं कर सकता।

एकमात्र तरीका है

docker commit `docker ps -q -l` my_image
docker run -it my_image /bin/bash

क्या मैं सही हू? क्या कोई बेहतर तरीका है? (मैं docker 0.8.0 का उपयोग कर रहा हूँ।)


1
क्या आपने कन्टेनर को कोई नाम निर्दिष्ट करने का प्रयास किया है, और उस नाम का उपयोग इसे नियंत्रित करने के लिए किया है? वैसे, "इससे बाहर निकलें" से, आपका मतलब इससे अलग है, है ना?
एरिक प्लैटन

12
डोकर है प्रोग्रामिंग के लिए एक उपकरण, कम से कम है कि मैं इसे कैसे इस्तेमाल करते हैं। यदि बहुमत असहमत है, तो किसी को डॉकटर को कहना चाहिए कि वह स्टैकऑवरफ्लो को सवाल पूछने की जगह के रूप में न बताए। मुझे यकीन है कि यह पहला "DevOps" जैसा प्रश्न नहीं है जो यहाँ या सुपरयूज़र पर जा सकता है।
टेड एम। यंग

5
Docker एक डेवलपर टूल है। यह पहले से ही एक 'docker' टैग है। इसलिए, मुझे लगता है कि स्टैकओवरफ्लो में पूछना उचित है। मैं इसका उपयोग छवि बनाने के लिए करता हूं जिसे स्वच्छ वातावरण से निर्माण की आवश्यकता होती है।
डैनियल वाईसी लिन

6
मैं उन लोगों की कामना करता हूं जिन्होंने इसे "ऑफ-टॉपिक" के रूप में टैग किया था, वे क्यों समझाएंगे!
जपताज़ो

2
ऑफ-टॉपिक नहीं होने के रूप में इस सवाल का समर्थन करने के लिए: meta.stackoverflow.com/q/276579/210336 और meta.stackoverflow.com/q/271279/210336
मैथिज्स वेसल्स

जवाबों:


291

आप मौजूदा कंटेनर को बाहर निकलने के बाद फिर से चालू कर सकते हैं और आपके परिवर्तन अभी भी हैं।

docker start  `docker ps -q -l` # restart it in the background
docker attach `docker ps -q -l` # reattach the terminal & stdin

3
एक पंक्ति के रूप में संक्षिप्त करने के लिए: docker start `docker ps -q -l` && docker attach `docker ps -q -l`
डैनियल YC लिन

7
एक पंक्ति के रूप में संक्षिप्त करने के लिए docker start -i $(docker ps -q -l):। ;-) नामकरण बेहतर नियंत्रण में मदद कर सकता है कि कौन सा कंटेनर चुना गया है। -lअंतिम प्राप्त करें, ठीक है ...
एरिक प्लटन

103
लिनक्स के लिए नए लोगों के लिए, `docker ps -q -l`बिट एक विस्तार है। इसे अंतिम (-l) डॉक कंटेनर के आईडी से बदल दिया जाएगा। -q केवल अन्य जानकारी को दबाता है (आईडी को बेडसाइड करता है) आमतौर पर आउटपुट द्वारा `docker ps`। ---- नोट: बैकटिक एक उद्धरण चिन्ह नहीं है, इसका एक बहुत ही खास अर्थ है। बैकटिक्स के
bnieland

1
मैंने कंटेनर को एक ऐसी स्थिति में पाया है जिसे कहा जाता Created...है जिसमें से इसे शुरू नहीं किया जा सकता है docker start ...। हालाँकि इसे फिर से शुरू किया जा सकता हैdocker restart ...
वोल्टेयर

2
नोट: -lकेवल "नवीनतम" docker हो जाता है। यदि आप मेरे जैसे हैं और docker ps -aएक से अधिक चीजें दिखाते हैं जिन्हें आपको शुरू करने की आवश्यकता है, तो आप ऊपर दिए गए कमांड को बदलकर उनमें से "सभी" (-ए) को पुनः आरंभ कर सकते हैं docker start `docker ps -q -a`-qबस इसे "शांत" बनाता है (आउटपुट लॉगिंग नहीं)।
रॉक ली

148
docker start -a -i `docker ps -q -l`

स्पष्टीकरण:

docker startकंटेनर प्रारंभ करें (नाम या ID की आवश्यकता होती है)
-aकंटेनर
-iइंटरेक्टिव मोड के साथ संलग्न करें
docker psसूची कंटेनर
-qकेवल कंटेनर आईडी
-lसूची को केवल पिछले बनाए गए कंटेनर की सूची दें


docker ps -q -l, यह अंतिम स्टेटस की कंटेनर आईडी देता है, भले ही यह स्टार्ट स्टेटस में हो।
धर्मंग

कंटेनर को तथाकथित "संलग्न" क्या है? "संलग्न"?
स्कायट्री

49

उपयोग:

docker start $(docker ps -a -q --filter "status=exited")

यह सभी कंटेनरों को शुरू करेगा जो कि बाहर की अवस्था में हैं।

docker exec -it <container-id> /bin/bash

यह विशेष कंटेनर से जुड़ेगा।


2
मैंने पाया कि यह एकमात्र ऐसा था जो मेरे लिए काम करता था .. उस महत्वपूर्ण दूसरी पंक्ति के कारण। docker exec -it <container id> /bin/bash(या सिर्फ बैश)।
बार्लोप

यह मेरे लिए काम करता है, लेकिन मैं इसे दो बार चलाने के लिए था क्योंकि मेरे पास दो कंटेनर थे। तो अगर पहला शुरू होता है और दूसरा एक त्रुटि मिलती है। बस फिर से उसी कमांड को हिट करें और इसे अगला कंटेनर शुरू करना चाहिए।
एंड्रीजा जे फोरकिडनी

20

यदि आप इसे कई, आसानी से याद रखने वाले कमांड में करना चाहते हैं:

  1. सूची बंद कंटेनर:

docker ps -a

  1. जिस कंटेनर को आप संलग्न करना चाहते हैं, उसका नाम या कंटेनर आईडी कॉपी करें और कंटेनर को इसके साथ शुरू करें:

docker start -i <name/id>

-iझंडा डोकर बताता कंटेनर की stdin के लिए संलग्न करने के लिए।

यदि कंटेनर को कनेक्ट करने के लिए एक इंटरैक्टिव शेल के साथ शुरू नहीं किया गया था, तो आपको शेल चलाने के लिए ऐसा करने की आवश्यकता है:

docker start <name/id>
docker exec -it <name/id> /bin/sh

/bin/shखोल आमतौर पर अल्पाइन आधारित छवियों के साथ उपलब्ध है।


बिना जवाब दिए, इससे मुझे इस सवाल पर "जवाब" की तुलना में मैं जिस कंटेनर की तलाश में था, उसे ढूंढने में मदद मिली।
निकोलस लैब्रेक

3
Error response from daemon: Container <id> is not running
सेरिन

14

यदि आप एक ज्ञात नाम के साथ ठीक एक डॉक कंटेनर जारी रखना चाहते हैं:

docker start  `docker ps -a -q --filter "name=elas"`

1
धन्यवाद @ नेल्सन यह मेरे लिए विशेष रूप से डॉकटर शुरू करने के लिए बहुत मददगार है
SACHIN CHAVAN

इस स्थिति में आप बस वही चला सकते हैं docker start <name>जहां <name> आपके कंटेनर का नाम है। कम से कम docker v19.03.8 के साथ
डॉन फौमारे

13

इन कदमों का अनुसरण करें:

  1. नीचे दिए गए आदेश को देखें कि सभी कंटेनर सेवाएं चल रही हैं और बंद हो गई हैं। विकल्प -aयह देखने के लिए दिया जाता है कि कंटेनर रुक जाता है

    docker ps -a
    
  2. फिर डॉक कंटेनर को या तो container_idकंटेनर टैग नामों से शुरू करें

    docker start <CONTAINER_ID> or <NAMES>
    

    यहां छवि विवरण दर्ज करें

    उपरोक्त चित्र से कहें, कंटेनर आईडी 4b161b302337
    तो चलाने के लिए कमांड है

    docker start 4b161b302337
    
  3. कोई यह सत्यापित कर सकता है कि कंटेनर किसके साथ चल रहा है

    docker ps
    

9

यदि आपके पास एक नामित कंटेनर है तो इसे चालू करके शुरू किया जा सकता है

docker container start container_name

जहाँ कंटेनर बनाने के समय कंटेनर_नाम कंटेनर का नाम है जिसे दिया जाना चाहिए। container_nameकंटेनर का नाम नहीं होने की स्थिति में आप कंटेनर आईडी से बदल सकते हैं । कंटेनर ID को चलाकर पाया जा सकता है:

docker ps -a

5

ये कमांड किसी भी कंटेनर के लिए काम करेंगे (न केवल पिछले बाहर वाले)। आपके सिस्टम के रीबूट होने के बाद भी यह तरीका काम करेगा। ऐसा करने के लिए, ये कमांड "कंटेनर आईडी" का उपयोग करेंगे।

कदम:

  1. इस आदेश का उपयोग करके सभी डॉकरों को सूचीबद्ध करें और जिस कंटेनर को आप पुनरारंभ करना चाहते हैं, उसके कंटेनर आईडी पर ध्यान दें: docker ps -a

  2. कंटेनर आईडी का उपयोग करके अपना कंटेनर प्रारंभ करें: docker start <container_id>

  3. अपना कंटेनर संलग्न करें और चलाएं: docker attach <container_id>

नोट: लिनक्स पर काम करता है


1

नाम से

sudo docker start bob_the_container

या ईद से

sudo docker start aa3f365f0f4e

इस पुनरारंभ ने कंटेनर को बंद कर दिया, कंटेनर के एसटीडीआईएन को जोड़ने के लिए -i या -i के बजाय आप कंटेनर सत्र में संलग्न कर सकते हैं (यदि आप -it के साथ चलते हैं)

sudo docker attach bob_the_container

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