Docker: Nazwa kontenera jest używana przez inny kontener
Podczas pracy z dockerem możemy napotkać różne problemy. Na przykład przy próbie uruchomienia projektu możemy czasem dostać błąd typu „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:
bin/start
Niestety próba uruchomienia zakończyła się następującym błędem:
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, z którym mamy problem, 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:
docker rm /magento246p3-phpfpm-1
Mniej ciekawiej jest, kiedy konflikty występują non stop, kiedy kolejne uruchomienie sprawia, że ten sam problem jest przy innym kontenerze. W tym przypadku byłoby dobrze wyczyścić więcej kontenerów przed ponownym uruchomieniem projektu. W dokumentacji docker rm mamy przykłady jak to zrobić.
Innym sposobem jest użycie poniższej komendy:
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 do drugiego, 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 on listę 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 do polecenia docker rm, które usunie podane kontenery.