JH's Develog

[Docker] none 이미지 삭제하기 본문

Docker

[Docker] none 이미지 삭제하기

jhkimmm 2021. 12. 29. 00:32

도커 이미지를 빌드하다보면 위와 같은 <none>이미지들이 쌓이곤 하는데 일일히 ID입력해서 지우기는 너무 번거롭습니다. <none> 이미지들을 일괄적으로 한번에 삭제하는 방법을 알아보겠습니다.

 

docker rmi $(docker images -f "dangling=true" -q)

dangling 필터는 TAG가 없는(none)인 이미지만 필터링 해주므로 -f 옵션으로 dangling=true인 이미지들만 검색한 후

-q 옵션을 통해 이미지의 ID만 가져와서 rmi를 통해 삭제해주는 명령어 입니다.

Error response from daemon: conflict: unable to delete <IMAGE ID> (must be forced) 
- image is being used by stopped container <CONTAINER ID>

어떤 이미지들은 위와 같은 에러 메시지가 뜨면서 삭제할 수 없는데 이는 Stopped된 컨테이너에서 해당 이미지를 사용하고 있기 때문입니다.

 

이때에는 두가지 방법이 있는데 하나는 -f 옵션을 추가하여 이미지를 강제로 삭제하는 방법입니다.

docker rmi -f $(docker images -f "dangling=true" -q)

이렇게 되면 이미지는 사용되고 있는 컨테이너가 있더라도 강제로 삭제됩니다.

 

다른 방법은 Exited된 컨테이너를 먼저 삭제해주고 나서 none 이미지 삭제 명령어를 실행하는 방법입니다.

docker ps -a 명령어를 통해서 컨테이너들을 확인하고 하나하나 지워도 되지만

docker rm $(docker ps --filter status=exited -q)

위 명령어로 Exited 상태인 컨테이너를 모두 삭제하고 none 이미지 삭제 명령어를 삭제해도 됩니다.

다만 이 방법을 사용하면 none 아닌 이미지를 사용하고 있는 컨테이너여도 Exited상태이면 모두 삭제 되므로 주의해서 사용해야합니다.

Comments