Docker: Nazwa kontenera jest używana przez inny kontener
Podczas pracy z dockerem, przy próbie uruchomienia projektu możemy napotkać różne problemy. Jednym z nich jest konflikt: nazwa kontenera jest używana przez inny kontener.
Problem napotkałam przy uruchamianiu projektu na konfiguracji dockera Mark Shust dla Magento. Postawiony projekt uruchamiamy poprzez polecenie:
1 |
bin/start |
Niestety próba uruchomienia zakończyła się następującym błędem:
1 |
docker: Error response from daemon: Conflict. The container name "/magento246p3-phpfpm-1" is already in use by container "c5a91ef51a529a00dcbef180560dc2b392f3d9ab05b8c29fa1bf640d64271de7". You have to remove (or rename) that container to be able to reuse that name. See 'docker run --help'. |
Na początek zatrzymajmy kontener za pomocą polecenia docker stop:
1 |
docker stop /magento246p3-phpfpm-1 |
Co dalej? Rozwiązanie jest w zasadzie banalne. Możemy po prostu usunąć ten kontener za pomocą komendy docker rm:
1 |
docker rm /magento246p3-phpfpm-1 |
Mniej ciekawiej jest, kiedy konflikty występują non stop, tym razem przy innym kontenerze. Tym samym potrzebujemy więc wyczyścić większą liczbę kontenerów. W dokumentacji docker rm
mamy przykłady jak to zrobić.
Innym sposobem jest użycie poniższej komendy:
1 |
sudo docker ps -aq | xargs docker stop | xargs docker rm |
Co robi ta jednolinijkowa komenda?
1 |
docker ps -aq |
Polecenie docker ps pobiera listę kontenerów, gdzie parametry:
- a — pobieramy listę wszystkich (zarówno tych uruchomionych jak i zatrzymanych),
- q — wyświetl tylko ID kontenerów.
Znak '|’ to operator pipe, za pomocą niego możemy wysłać dane z jednego polecenia, w tym wypadku przekazujemy listę identyfikatorów kontenerów.
1 |
xargs docker stop |
Polecenie docker stop tym poleceniem zatrzymujemy pracę otrzymanej listy kontenerów.
xargs jest poleceniem uniksowym, które jest używane do budowania i wykonywania poleceń ze standardowego wejścia. Konstruuje listy parametrów i pozwala na uruchomienie komendy. Ostatnia rzecz, jaką wykonujemy:
1 |
xargs docker rm |
Ponownie używamy xargs, aby przekazało listę identyfikatorów kontenerów i przekazało do uruchomienia z polecenia docker rm, które usunie nam ten kontenery.