obraz jest używany przez zatrzymany kontener

94

Próbuję usunąć kontener Dockera za pomocą tego polecenia:

docker rmi <Image-Id>

Oczywiście zastąpiłem identyfikator obrazu identyfikatorem, którego używam:

docker images

Ale widzę błąd poniżej:

Error response from daemon: conflict: unable to delete <Image-ID> (must be forced) - image is being used by stopped container xxxxxxxxxxx
Mehrdad Babaki
źródło

Odpowiedzi:

121

Możesz także użyć opcji --force , -fWymuś usunięcie obrazu

Jeśli użyjesz flagi -f i określisz krótki lub długi identyfikator obrazu, to polecenie odznaczy i usunie wszystkie obrazy, które pasują do określonego identyfikatora.

  docker rmi -f <image_id> 
Adiii
źródło
1
Dzięki, działało dobrze, ale jest problem. Usunąłem obraz o rozmiarze 10 GB, ale po usunięciu nie widzę żadnej zmiany w moim wolnym miejscu na dysku.
Mehrdad Babaki
1
czy usunąłeś woluminy dołączone do obrazu i czy sprawdziłeś rozmiar każdego obrazu
Adiii,
1
Niezupełnie, jestem nowy w dockerze. Spróbuję tego narzędzia Przy okazji mogę użyć wiersza poleceń do wykrycia woluminu i ich usunięcia?
Mehrdad Babaki,
1
tak objętość dokera ls; aby wyświetlić wolumin i usunąć, docker volume rm v_id
Adiii
40

Musisz usunąć zatrzymany kontener za pomocą docker rm, a następnie możesz usunąć obraz, z którym korzysta docker rmi.

David Maze
źródło
3
To część każdej pełnej odpowiedzi. Możesz wymusić usunięcie lub usunąć zatrzymany obraz.
bmacnaughton
28

Może się również okazać, że zatrzymałeś kontenery powodujące blokadę. Usuń je najpierw, używając:

docker rm  $(docker ps -q -a)

Tutaj wymieniamy procesy dockera tylko według identyfikatora, a następnie usuwamy je; jednak docker rm usunie tylko zatrzymane kontenery.

Następnie wróć i usuń obrazy za pomocą:

docker image rm <image_id>
Angus
źródło
22

Najpierw musisz usunąć pojemnik.
Zmuszony to ostatnia metoda.

#check container
docker ps -a

#remove container
docker rm containerID
Hideyasu.T
źródło
3
Zdecydowanie najlepsza odpowiedź. Jedyny, który wyjaśnia, jak uzyskać listę zatrzymanych kontenerów.
Marco
4

W razie docker rmi <image-id> nie zadziałało, spróbuj tego:

Zatrzymaj wszystkie uruchomione kontenery

docker stop $(docker ps -aq)

Usuń wszystkie pojemniki

docker rm $(docker ps -aq)

Usuń wszystkie obrazy

docker rmi $(docker images -q)
arilwan
źródło
3

Oprócz innych odpowiedzi miałem ten sam problem podczas korzystania z Dockera dla komputerów Mac, ale docker ps -anie pokazałem żadnych uruchomionych kontenerów. docker imagesPokazy biegowe :

docker/desktop-storage-provisioner   v1.0                605a0f683b7b        2 months ago        33.1MB
k8s.gcr.io/kube-controller-manager   v1.15.5             1399a72fa1a9        6 months ago        159MB
k8s.gcr.io/kube-proxy                v1.15.5             cbd7f21fec99        6 months ago        82.4MB
k8s.gcr.io/kube-apiserver            v1.15.5             e534b1952a0d        6 months ago        207MB
k8s.gcr.io/kube-scheduler            v1.15.5             fab2dded59dd        6 months ago        81.1MB
docker/kube-compose-controller       v0.4.23             a8c3d87a58e7        11 months ago       35.3MB
docker/kube-compose-api-server       v0.4.23             f3591b2cb223        11 months ago       49.9MB
k8s.gcr.io/coredns                   1.3.1               eb516548c180        16 months ago       40.3MB
k8s.gcr.io/etcd                      3.3.10              2c4adeb21b4f        17 months ago       258MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        2 years ago         742kB

Wszystkie te obrazy są używane przez aplikację Docker, jeśli masz włączoną usługę Kubernetes. W preferencjach Dockera na Maca znajduje się sekcja dotycząca Kubernetes. Jeśli klikniesz „Pokaż kontenery systemowe (zaawansowane)”, pojawią się one wdocker ps .

Jeśli chcesz usunąć te obrazy, musisz wyłączyć Kubernetes za pomocą aplikacji Docker na Maca, a następnie spróbować ponownie.

Eric
źródło
2

Kontenery platformy Docker działają na obrazach platformy Docker, możesz usunąć obraz tylko wtedy, gdy nie jest on dołączony do żadnego kontenera.! Musisz więc zatrzymać kontener i usunąć kontener, a następnie możesz usunąć identyfikator obrazu.

docker stop container-id i docker rm container-id

Następnie spróbuj usunąć obraz docker rmi image-id

Dodatkowe informacje podane w linku poniżej. Twoje zdrowie.!

https://docs.docker.com/config/pruning/

surya kiran
źródło
To powinna być prawidłowa odpowiedź po procesie zatrzymania kontenera (docker-compose stop) -> usuń kontener (docker rm <nazwa kontenera>) -> usuń skojarzone obrazy (docker rmi <image_id>).
kta
1

Jeśli celem jest odzyskanie miejsca na dysku, należy zastosować inną metodę, o której jeszcze nie wspomniano docker system prune. Wydrukuje ostrzeżenie, na które należy zwrócić uwagę:

WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache

Nie spowoduje to usunięcia nazwanych obrazów, ale usunie pośrednie nienazwane obrazy. W zależności od rozmiarów używanych kontenerów może to zaoszczędzić znaczną ilość miejsca na dysku.

Edward
źródło
0

Jeśli dokonałeś zmian w Dockerfilei jeśli używasz docker compose, możesz po prostu odbudować swój obraz, uruchamiając docker-compose z --buildopcją!

ans1genie
źródło
Jeśli dokonałeś jakichkolwiek zmian na, Dockerfilenie powinieneś samodzielnie usuwać obrazu, po prostu użyj flagi --buildz, docker-composeaby odbudować nowy obraz ze zmianami
ans1genie