docker run -> 'ad zaten kapsayıcı tarafından kullanılıyor'


387

Koşu dockerkomutu daima bir hata atar altında olan kayıt:

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.

Bu hata nasıl önlenir?

Yanıtlar:


427

Bununla da kafam karıştı. Burada ilgili iki komut vardır:

docker run Yeni bir kapsayıcıda komut çalıştırma

docker start Bir veya daha fazla durdurulmuş kapsayıcı başlat


8
Docker kapsayıcısını yeniden çalıştırmak için aradığım cevap bu. Teşekkürler!
isapir

105
Bu nedenle, docker ps -abu durumda tüm kapları görmek için kullanmak da önemlidir .
Sławosz

9
evet, docker start -a container-nameoluşturulmuş bir kapsayıcıyı başlatmak için kullanabileceğiniz komuttur docker run. -aKısayol için olan bayrağı not edin --attach. Bu şekilde kap, tıpkı kullandığınız gibi ön planda başlar docker run(varsayılan olarak ön planda bir kap çalıştırır).
Krzysztof Wołowski

1
@Suncatcher Evet.
0x7d7b

1
@ eMPee584 Hayır, çünkü docker create bir kap oluşturur, ancak çalıştırmaz.
0x7d7b

182

Bu, geçmişte parametreyle daha önce bir kap başlattığınız anlamına gelir docker run --name registry-v1 ....

Aynı adda bir kapsayıcı yeniden oluşturabilmeniz için önce bunu silmeniz gerekir docker rm registry-v1. Bu kap eşik çalışırken, silebilmeniz için önce onu durdurmanız gerekir docker stop registry-v1. Veya yeni kapsayıcı için farklı bir ad seçin.

Mevcut kapsayıcıların ve adlarının bir listesini almak için çağırmanız yeterlidir docker ps -a.


4
Ama neden durdurulmuşlar? Ya da durdularsa hala oradalarsa iyi olan nedir?
mskw

2
Böylece onları daha sonra yeniden yaratmadan çalıştırabilirsiniz
Scott Stensland

2
Yani, temel olarak "görüntüyü bir kez ÇALIŞTIRABİLİRSİNİZ (yani kapsayıcıyı üretip içindeki komutu çalıştırın), sonra kapsayıcıyı istediğiniz kadar BAŞLAYIN". Ama neden bir şeyi sadece bir kez ÇALIŞMALISIM? Kapta "bir şeyin" yaptığı olası değişikliklere bile devam etmeden (unutmayın, liman işçiliği konteyneri durum değişiklikleri taahhüt edilmedikçe kaybolur).
Maksim Gumerov

14
Konteynerinizin adını biliyorsanız, bu kısayolu kullanarak kaldırabilirsinizdocker rm $(docker ps -aq --filter name=myContainerName)
Jujhar Singh

2
@JujharSingh Neden sadece docker rm myContainerName?
Rodrigo

152

Burada yaptığım, iyi çalışıyor.

1. adım: (liman işçisi konteynerini adıyla listeler)

docker ps -a

Adım 2:

docker rm name_of_the_docker_container

4
Bu bana yardımcı oldu, "docker ps" istemeden bir şey dönmek için -a bayrak gerekir.
MichaelChan

docker ps yalnızca çalışan kapları döndürür ve durdurulanları bile listelemek için -a gerekir.
Surendra Pratap

57

Başkalarının söylediklerini açıklamak (anlamak için biraz zaman aldı), basitçe söylemek gerekirse, bu hatayı gördüğünüzde, zaten bir konteyneriniz olduğu ve yapmanız gereken şeyin onu çalıştırmak olduğu anlamına gelir. Sezgisel docker runolarak çalıştırması gerekiyorsa da, öyle değil. Komut docker runsadece kullanılır BAŞLANGIÇ ilk defa bir kap. Mevcut bir kapsayıcı çalıştırmak için ihtiyacınız olan şey docker start $container-name. Geliştiricilerden anlamlı / sezgisel komutlar oluşturmalarını istemek için çok fazla.


32

Bunu düzeltmek için 2 seçeneğiniz var ...

  1. Komutu kullanarak bu adı kullanarak önceki kapsayıcıyı kaldırın docker rm $(docker ps -aq --filter name=myContainerName)

    VEYA

  2. Mevcut kapsayıcıyı farklı bir adla yeniden adlandırın, yani bu kısmı --name registry-v1aşağıdaki gibi değiştirin --name myAnotherContainerName

Bu hatayı alıyorsunuz çünkü bu kapsayıcı adı (yani registry-v1) geçmişte başka bir kapsayıcı tarafından kullanılmıştı ... kaptan çıkılmış olsa bile (şu anda kullanımda değil).


30

Yeni bir görüntü oluştururken, her seferinde ve aynı adla yeni bir kapsayıcı çalıştırmak istersiniz. Ben en kolay yolu --rm seçeneği ile konteyner başlatmak için bulundu :

--rm        Automatically remove the container when it exits

Örneğin

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

Ne yazık ki, dokümanlardaki örneklerde neredeyse rastgele kullanılır


görüntü veya kap?
Pim Heijden

1
Kapsayıcılar yerleşik görüntülerden çalıştırılır. Sınıf tanımına (resim) ve sınıf örneğine (kapsayıcı) kabaca benzer.
Martin

Önce kapsayıcı, sonra imge. Bu belli değil. Ayrıca, bu görüntü için bir kap zaten çalışıyorsa, kullandıktan sonra çalışmaya devam edecektir --rm. Yeniden başlamıyor.
Pim Heijden

4
Yalnızca bir not: --rmyalnızca kapsayıcıyı --rmbayrak kullanarak oluşturduysanız çalışır . Bu, kapsayıcıyı bayraksız oluşturduysanız, --rmbayrağın avantajından yararlanabilmek için önce elle kaldırmanız gerekeceği anlamına gelir rm.
lepe

18

Sebep olmak

Aynı ada sahip bir kapsayıcı hala var.

Çözüm

Aynı kapsayıcı adını yeniden kullanmak için, şu kapsayıcıyı şu yolla silin:

docker rm <container name>

açıklama

Kapsayıcılar, kapsayıcı adının başka bir kapsayıcı için kullanılamadığı aşağıdaki durumlarda bulunabilir:

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

Kapsayıcıları aşağıdakileri runningkullanarak durum halinde görebilirsiniz :

docker ps

Tüm eyaletlerde kapsayıcıları göstermek ve kapsayıcı adının alınıp alınmadığını öğrenmek için şunu kullanın:

docker ps -a

Kapsayıcıyı yeniden kullanmak isterse, --rm uygun anahtar değildir. Basit bir "liman işçisi başlat {konteyner adı}" yeterlidir.
Ken Ingram

11

Ubuntu 18'de bunu nasıl çözdüm:

  1. $ sudo docker ps -a
  2. kapsayıcı kimliğini kopyala

Her konteyner için şunları yapın:

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

10

Komut ile kaldırabilir sudo docker rm YOUR_CONTAINER_ID, ardından ile yeni bir kapsayıcı çalıştırabilirsiniz sudo docker run ...; veya mevcut bir kapsayıcıyısudo docker start YOUR_CONTAINER_ID


7

Aşağıdaki adımları uygulayarak sorunu çözdüm ve umarım yardımcı olur.

  1. Tip docker ps -asisteminizdeki tüm kapları listelemek için.
  2. Liman işçisi konteynırınızı başlattığınız NAMES bölümünü kontrol edin.
  3. Sonra yazın docker rm --force name_of_container
  4. Yükleme istasyonu konteynerini istediğiniz gibi takın.

NIFI kullanarak sorun yaşadım ve docker kullanarak kaldırıldı ve yeniden yükledim. İyi şanslar.


4

Sadece docker öğreniyorum ve bu da beni yakaladı. Bu adla kapsayıcıyı durdurdum ve bu nedenle bu adla yeni bir kapsayıcı çalıştırabileceğimi düşündüm.

Durum böyle değil. Kapsayıcı durdurulduğundan, yeniden başlatılamayacağı anlamına gelmez ve oluşturulduğu tüm parametreleri (ad dahil) tutar.

koştuğumda docker ps -a, oyun oynarken yarattığım tüm sahte test kaplarını gördüm.

Sorun değil, artık istemediğim için docker rm containernameyeni kapımın eski adla çalışmasına izin verildi.

Ah, ve şimdi bu cevabı yazmayı bitirdiğimde, Slawosz'un Walt Howard'ın yukarıdaki cevabı hakkındaki yorumunu docker ps -a

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.