docker run -> 'नाम पहले से कंटेनर द्वारा उपयोग में है'


387

dockerनीचे कमांड के साथ रजिस्ट्री चलाना हमेशा एक त्रुटि फेंकता है:

dev:tmp me$ docker run \
     -d --name registry-v1 \
     -e SETTINGS_FLAVOR=local \
     -e STORAGE_PATH=/registry \
     -e SEARCH_BACKEND=sqlalchemy \
     -e LOGLEVEL=DEBUG \
     -p 5000:5000 \
     registry:0.9.1
Error response from daemon: Conflict. The name "registry-v1" is already in use by container f9e5798a82e0. You have to delete (or rename) that container to be able to reuse that name.

इस त्रुटि को कैसे रोकें?

जवाबों:


427

मैं इससे भी भ्रमित हो गया। यहां प्रासंगिक दो आदेश हैं:

docker run एक नए कंटेनर में एक कमांड चलाएँ

docker start एक या अधिक रोके गए कंटेनरों को प्रारंभ करें


8
यह वह उत्तर है जिसे मैं डॉकटर कंटेनर को फिर से चलाने के लिए देख रहा था। धन्यवाद!
नेपिर 5’16

105
इसलिए docker ps -aइस मामले में सभी कंटेनरों को देखने के लिए उपयोग करना भी महत्वपूर्ण है ।
स्लावोसज़

9
हाँ, docker start -a container-nameवह कमांड है जिसका उपयोग आप एक कंटेनर को शुरू करने के लिए कर सकते हैं जिसे बनाया गया है docker run। उस -aझंडे पर ध्यान दें जो शॉर्टहैंड है --attach। इस तरह कंटेनर को अग्रभूमि में शुरू किया जाता है, ठीक उसी तरह जब आप उपयोग करते हैं docker run(जो डिफ़ॉल्ट रूप से अग्रभूमि में कंटेनर चलाता है)।
Krzysztof Wołowski

1
@Suncatcher हाँ।
0x7d7b

1
@ eMPee584 नहीं, क्योंकि docker create एक कंटेनर बनाता है , लेकिन इसे चलाता नहीं है।
0x7d7b

182

इसका मतलब है कि आप पहले से ही पैरामीटर के साथ एक कंटेनर शुरू कर चुके हैं docker run --name registry-v1 ...

इससे पहले कि आप एक ही नाम के साथ एक कंटेनर फिर से बना सकते हैं, आपको पहले उसे हटाने की आवश्यकता है docker rm registry-v1। जब वह कंटेनर चल रहा हो, तो आपको इसे रोकने से पहले इसे पहले बंद करना होगा docker stop registry-v1। या बस नए कंटेनर के लिए एक अलग नाम चुनें।

मौजूदा कंटेनरों की एक सूची प्राप्त करने के लिए और उनके नाम बस आह्वान करते हैं docker ps -a


4
लेकिन जिन लोगों को रोका जाता है, वे क्यों हैं? या अगर वे रुके हुए हैं तो क्या अच्छा है?
mskw

2
इसलिए आप उन्हें बाद में बिना
रीक्रिएट

2
तो आप मूल रूप से कह रहे हैं "ताकि आप एक बार छवि को फिर से चला सकें (अर्थात कंटेनर का उत्पादन करें, फिर उसमें कमांड चलाएं), फिर कंटेनर को जितनी बार चाहें उतनी बार स्टार्ट करें"। लेकिन हमें सिर्फ एक बार कुछ चलाने की आवश्यकता क्यों होगी? यहां तक ​​कि संभावित परिवर्तनों को जारी रखने के बिना कि कंटेनर में किए गए "कुछ" (याद रखें, जब तक कि प्रतिबद्ध नहीं है, डॉकटर कंटेनर राज्य परिवर्तन खो जाते हैं)।
मकसीम गुमेरोव

14
यदि आप अपने कंटेनर का नाम जानते हैं तो आप इस शॉर्टकट का उपयोग करके इसे हटा सकते हैंdocker rm $(docker ps -aq --filter name=myContainerName)
जुझार सिंह

2
@ जुझारसिंह ही क्यों docker rm myContainerName?
रॉड्रिगो

152

यहाँ मैंने क्या किया, यह ठीक काम करता है।

चरण 1: (यह अपने नाम के साथ डॉकटर कंटेनर को सूचीबद्ध करता है)

docker ps -a

चरण 2:

docker rm name_of_the_docker_container

4
यह मेरे लिए मददगार था, "docker ps" को कुछ भी वापस करने के लिए अनायास ही फ्लैग की जरूरत है।
माइकलचैन

docker ps केवल रुके हुए कंटेनर को सूचीबद्ध करने के लिए कंटेनर और ज़रूरतों को पूरा करता है।
सुरेंद्र प्रताप

57

बस यह बताने के लिए कि अन्य क्या कह रहे हैं (मुझे समझने में थोड़ा समय लगा), यह है कि, जब आप इस त्रुटि को देखते हैं, तो इसका मतलब है कि आपके पास पहले से ही एक कंटेनर है और आपको जो करना है, उसे चलाएं। जबकि सहज docker runरूप से इसे चलाने के लिए माना जाता है, यह नहीं है। कमांड docker runका उपयोग केवल पहली बार कंटेनर को शुरू करने के लिए किया जाता है । एक मौजूदा कंटेनर चलाने के लिए जो आपको चाहिए docker start $container-name। डेवलपर्स को सार्थक / सहज आदेश बनाने के लिए कहने के लिए बहुत कुछ।


32

इसे ठीक करने के लिए आपके पास 2 विकल्प हैं ...

  1. कमांड के साथ उस नाम का उपयोग करके पिछले कंटेनर को हटा दें docker rm $(docker ps -aq --filter name=myContainerName)

    या

  2. एक अलग नाम के लिए वर्तमान कंटेनर का नाम बदलें अर्थात् इस हिस्से --name registry-v1को कुछ इस तरह बदलें --name myAnotherContainerName

आपको यह त्रुटि इसलिए हो रही है क्योंकि उस कंटेनर का नाम (यानी registry-v1) अतीत में किसी अन्य कंटेनर द्वारा उपयोग किया गया था ... भले ही वह कंटेनर बाहर निकल गया हो (अर्थात वर्तमान में उपयोग में नहीं है)।


30

जब आप एक नई छवि बना रहे होते हैं तो आप अक्सर एक नया कंटेनर हर बार और उसी नाम से चलाना चाहते हैं। मैंने पाया कि सबसे आसान तरीका --rm विकल्प के साथ कंटेनर को शुरू करना था :

--rm        Automatically remove the container when it exits

जैसे

docker run --name my-micro-service --rm <image>

अफसोस की बात है कि यह डॉक्स से उदाहरणों में लगभग बेतरतीब ढंग से उपयोग किया जाता है


छवि या कंटेनर?
पिम हाइजेन

1
कंटेनर निर्मित छवियों से चलाए जाते हैं। मोटे तौर पर वर्ग परिभाषा (छवि) और वर्ग उदाहरण (कंटेनर) के समान है।
मार्टिन

पहले आप कंटेनर कहते हैं, फिर छवि। यह अस्पष्ट है। इसके अलावा, अगर उस छवि के लिए एक कंटेनर पहले से ही चल रहा है, तो वह उपयोग करने के बाद भी चालू रहेगा --rm। यह पुनः आरंभ नहीं करता है।
पिम हाइजेन

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

18

कारण

इसी नाम का एक कंटेनर अभी भी मौजूद है।

समाधान

उसी कंटेनर नाम का पुन: उपयोग करने के लिए, मौजूदा कंटेनर को इसके द्वारा हटाएं:

docker rm <container name>

व्याख्या

कंटेनर निम्नलिखित राज्यों में मौजूद हो सकते हैं, जिसके दौरान कंटेनर का नाम दूसरे कंटेनर के लिए उपयोग नहीं किया जा सकता है:

  • created
  • restarting
  • running
  • paused
  • exited
  • dead

आप runningराज्य में कंटेनर का उपयोग करके देख सकते हैं :

docker ps

सभी राज्यों में कंटेनर दिखाने के लिए और पता करें कि क्या कंटेनर का नाम लिया गया है, उपयोग करें:

docker ps -a

यदि कोई कंटेनर को फिर से उपयोग करना चाहता है, तो - आरएम उपयुक्त स्विच नहीं है। एक साधारण "डॉकटर स्टार्ट {कंटेनर नेम}" पर्याप्त है।
केन इंग्राम

11

यहाँ मैं ubuntu 18 पर यह हल कैसे है:

  1. $ sudo docker ps -a
  2. कंटेनर आईडी कॉपी करें

प्रत्येक कंटेनर के लिए:

  1. $ sudo docker stop container_ID
  2. $ sudo docker rm container_ID

10

आप इसे कमांड से हटा सकते हैं sudo docker rm YOUR_CONTAINER_ID, फिर एक नया कंटेनर चला सकते हैं sudo docker run ...; या के साथ एक मौजूदा कंटेनर को पुनरारंभ करेंsudo docker start YOUR_CONTAINER_ID


7

मैंने निम्नलिखित चरणों को करके समस्या का हल किया है और मुझे आशा है कि इससे मदद मिलेगी।

  1. docker ps -aअपने सिस्टम के सभी कंटेनरों को सूचीबद्ध करने के लिए टाइप करें।
  2. NAMES भाग की जाँच करें जहाँ आपने अपने डॉकटर कंटेनर को इनिशियलाइज़ किया है।
  3. फिर टाइप करें docker rm --force name_of_container
  4. अपनी इच्छानुसार डॉकटर कंटेनर स्थापित करें।

मुझे NIFI का उपयोग करने में समस्या थी और मैंने डॉकटर का उपयोग करके हटा दिया और पुनः इंस्टॉल किया। सौभाग्य।


4

मैं सिर्फ डॉक सीख रहा हूं और मुझे भी यही मिला है। मैंने उस नाम वाले कंटेनर को पहले ही रोक दिया था और इसलिए मुझे लगा कि मैं उस नाम के साथ एक नया कंटेनर चला सकता हूं।

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

जब मैं भागा docker ps -a , जब मैंने सभी डमी टेस्ट कंटेनरों को देखा था जो मैंने बनाया था जब मैं चारों ओर खेल रहा था।

कोई समस्या नहीं है, क्योंकि मैं उन लोगों को नहीं चाहता जो मैंने अभी-अभी किया है docker rm containername, जिस बिंदु पर मेरे नए कंटेनर को पुराने नाम के साथ चलने की अनुमति दी गई थी।

आह, और अब जब मैं इस उत्तर को लिखना समाप्त कर रहा हूं, तो मैं उपयोग करने का सुझाव देने के ऊपर वॉल्ट हावर्ड के उत्तर पर स्लावोस की टिप्पणी देख रहा हूं docker ps -a

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