uruchomienie dokera -> „nazwa jest już używana przez kontener”

387

Uruchomienie dockerrejestru z poniższym poleceniem zawsze powoduje błąd:

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.

Jak zapobiec temu błędowi?

Rubytastyczny
źródło

Odpowiedzi:

427

Byłem tym także zdezorientowany. Istnieją tutaj dwa polecenia:

Uruchom okno dokowane Uruchom polecenie w nowym kontenerze

docker start Uruchom jeden lub więcej zatrzymanych kontenerów

Walt Howard
źródło
8
Oto odpowiedź, której szukałem, aby ponownie uruchomić kontener Docker. Dzięki!
isapir
105
Dlatego ważne jest, aby użyć docker ps -aw tym przypadku wszystkich pojemników.
Sławosz
9
tak, docker start -a container-nameto polecenie, którego można użyć do uruchomienia kontenera, który został utworzony docker run. Zwróć uwagę na -aflagę, która jest skrótem --attach. W ten sposób kontener jest uruchamiany na pierwszym planie, podobnie jak podczas używania docker run(który domyślnie uruchamia kontener na pierwszym planie).
Krzysztof Wołowski
1
@Suncatcher Tak.
0x7d7b,
1
@ eMPee584 Nie, ponieważ docker create tworzy kontener, ale go nie uruchamia.
0x7d7b,
182

Oznacza to, że kontener został już uruchomiony w przeszłości z parametrem docker run --name registry-v1 ....

Najpierw musisz go usunąć, aby móc ponownie utworzyć kontener o tej samej nazwie docker rm registry-v1. Kiedy ten kontener jest jeszcze uruchomiony, musisz go najpierw zatrzymać, zanim będziesz mógł go usunąć docker stop registry-v1. Lub po prostu wybierz inną nazwę dla nowego kontenera.

Aby uzyskać listę istniejących kontenerów i ich nazwy, wystarczy wywołać docker ps -a.

0x7d7b
źródło
4
Ale dlaczego są zatrzymani? A co dobrego, jeśli nadal tam są, jeśli zostaną zatrzymani?
mskw
2
Możesz więc uruchomić je później bez ich odtwarzania
Scott Stensland,
2
Mówisz więc po prostu „aby raz uruchomić RUN obraz (tzn. Wyprodukować kontener, a następnie uruchomić w nim polecenie), a następnie URUCHOMIĆ kontener tyle razy, ile chcesz”. Ale dlaczego mielibyśmy RUNOWAĆ coś tylko raz? Nawet nie utrwalając możliwych zmian, które „coś” wprowadziło do kontenera (pamiętaj, że zmiany stanu kontenera dokowanego są tracone, chyba że zostaną zatwierdzone).
Maksim Gumerov
14
Jeśli znasz nazwę swojego kontenera, możesz go usunąć za pomocą tego skrótudocker rm $(docker ps -aq --filter name=myContainerName)
Jujhar Singh
2
@JujharSingh Dlaczego nie tylko docker rm myContainerName?
Rodrigo
152

Tutaj, co zrobiłem, działa dobrze.

krok 1: (wyświetla nazwę kontenera dokowanego wraz z nazwą)

docker ps -a

krok 2:

docker rm name_of_the_docker_container
Thavaprakash Swaminathan
źródło
4
Było to dla mnie pomocne, „doker ps” nieświadomie potrzebuje flagi -a, aby cokolwiek zwrócić.
MichaelChan,
docker ps zwraca tylko działające kontenery i potrzebuje -a do wyświetlenia listy nawet tych zatrzymanych.
Surendra Pratap
57

Aby wyjaśnić, co mówią inni (zajęło mi to trochę czasu, aby zrozumieć), po prostu, gdy zobaczysz ten błąd, oznacza to, że masz już kontener i musisz go uruchomić. Chociaż intuicyjnie docker runma go uruchamiać, nie działa. Polecenie docker runsłuży tylko START pojemnik po raz pierwszy. Aby uruchomić istniejący kontener, potrzebujesz docker start $container-name. Tyle o proszeniu programistów o tworzenie sensownych / intuicyjnych poleceń.

mithunpaul
źródło
32

Masz 2 opcje, aby to naprawić ...

  1. Usuń poprzedni kontener, używając tej nazwy, za pomocą polecenia docker rm $(docker ps -aq --filter name=myContainerName)

    LUB

  2. Zmień nazwę bieżącego kontenera na inną nazwę, tj. Zmień tę część --name registry-v1na coś podobnego --name myAnotherContainerName

Otrzymujesz ten błąd, ponieważ nazwa kontenera (tj. registry-v1) Była używana przez inny kontener w przeszłości ... nawet jeśli ten kontener mógł wyjść, tj. (Obecnie nie jest używany).

Edwin Ikechukwu Okonkwo
źródło
30

Podczas budowania nowego obrazu często chcesz uruchamiać nowy kontener za każdym razem o tej samej nazwie. Znalazłem najprostszy sposób, aby uruchomić kontener z opcją --rm :

--rm        Automatically remove the container when it exits

na przykład

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

Niestety jest używane prawie losowo w przykładach z dokumentów

Jaskółka oknówka
źródło
obraz czy pojemnik?
Pim Heijden
1
Kontenery są uruchamiane z wbudowanych obrazów. Z grubsza podobny do definicji klasy (obraz) i instancji klasy (kontener).
Martin
Najpierw mówisz pojemnik, a potem obraz. To nie jest jasne. Ponadto, jeśli kontener dla tego obrazu jest już uruchomiony, pozostanie uruchomiony po użyciu --rm. Nie uruchamia się ponownie.
Pim Heijden,
4
Tylko uwaga: --rmdziała tylko wtedy, gdy kontener został utworzony przy użyciu --rmflagi. Oznacza to, że jeśli utworzyłeś kontener bez --rmflagi, będziesz musiał go usunąć ręcznie, zanim będziesz mógł skorzystać z rmflagi.
lepe
18

Przyczyna

Kontener o tej samej nazwie nadal istnieje.

Rozwiązanie

Aby ponownie użyć tej samej nazwy kontenera, usuń istniejący kontener przez:

docker rm <container name>

Wyjaśnienie

Kontenery mogą istnieć w następujących stanach, w których nazwy kontenera nie można użyć dla innego kontenera:

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

Kontenery można wyświetlić w runningstanie, używając:

docker ps

Aby wyświetlić kontenery we wszystkich stanach i dowiedzieć się, czy nazwa kontenera jest zajęta, użyj:

docker ps -a
Roderick Jonsson
źródło
Jeśli ktoś chce ponownie użyć kontenera, to --rm nie jest odpowiednim przełącznikiem. Wystarczy „start docker {nazwa kontenera}”.
Ken Ingram
11

Oto jak rozwiązałem to na Ubuntu 18:

  1. $ sudo docker ps -a
  2. skopiuj identyfikator kontenera

Dla każdego pojemnika wykonaj:

  1. $ sudo docker stop container_ID
  2. $ sudo docker rm container_ID
Ali Faghihinia
źródło
10

Możesz go usunąć za pomocą polecenia sudo docker rm YOUR_CONTAINER_ID, a następnie uruchomić nowy kontener za pomocą sudo docker run ...; lub zrestartuj istniejący kontener za pomocąsudo docker start YOUR_CONTAINER_ID

donglei
źródło
7

Rozwiązałem problem, wykonując następujące kroki i mam nadzieję, że to pomoże.

  1. Wpisz, docker ps -aaby wyświetlić listę wszystkich kontenerów w systemie.
  2. Sprawdź część NAMES, w której zainicjowałeś kontener Dockera.
  3. Następnie wpisz docker rm --force name_of_container
  4. Zainstaluj pojemnik dokera, jak chcesz.

Miałem problem z używaniem NIFI i usunąłem i ponownie zainstalowałem za pomocą dokera. Powodzenia.

Nijat Mursali
źródło
4

Właśnie się uczę dokera i to mnie też. Zatrzymałem już kontener o tej nazwie i dlatego pomyślałem, że mogę uruchomić nowy kontener o tej nazwie.

Nie tak jest. To, że kontener został zatrzymany, nie oznacza, że ​​nie można go ponownie uruchomić i zachowuje wszystkie te same parametry, które zostały utworzone (w tym nazwę).

kiedy pobiegłem docker ps -a , wtedy zobaczyłem wszystkie atrapy pojemników testowych, które stworzyłem podczas zabawy.

Nie ma problemu, ponieważ nie chcę ich więcej, właśnie zrobiłem, docker rm containernamew którym momencie mój nowy kontener mógł działać ze starą nazwą.

Ach, a teraz, kiedy kończę pisanie tej odpowiedzi, widzę komentarz Sławosza do powyższej odpowiedzi Walta Howarda sugerujący użycie docker ps -a

C. Tewalt
źródło