ステータスがexitedになっているDockerコンテナのみ削除

概要

ステータスが『Exited』となっているDockerコンテナのみdocker rmする場合の方法です。

ステータスが『Exited』となっているDockerコンテナのみ表示

docker ps -a -f status=exited

または

docker ps -a -f 'exited=0'

上記でSTATUSがExitedとなっているコンテナのみ表示されます。

docker rm実行

docker rm `docker ps -a -f status=exited -q`

上記で該当のコンテナのみdocker rm可能です。

Dockerのイメージ削除時のエラー「Error response from daemon: Conflict, cannot delete image」対策

概要

Dockerのイメージを削除する際、イメージ名を変更しているとエラーが出て一発で消せない時があります。

[root@test ~]# docker images
REPOSITORY   TAG              IMAGE ID            CREATED             VIRTUAL SIZE
hoge/centos   latest              2064fc6b29af        8 weeks ago         214.5 MB
fuga/centos   latest              2064fc6b29af        8 weeks ago         214.5 MB
[root@test ~]#

上記のイメージを削除する例です。

docker rmi `docker images -q`

で消そうとすると

Error response from daemon: Conflict, cannot delete image 2064fc6b29af because it is tagged in multiple repositories, use -f to force
Error response from daemon: Conflict, cannot delete image 2064fc6b29af because it is tagged in multiple repositories, use -f to force
Error: failed to remove images: [2064fc6b29af 2064fc6b29af]

こんなエラーが出る場合の対策です。

REPOSITORYが違っていますがIMAGE IDが同じです。

対策

docker rmiする際にREPOSITORYTAGを:(コロン)区切りで渡すと消すことが出来ます。

docker rmi `docker images | sed -ne '2,$p' -e 's/  */ /g' | awk '{print $1":"$2}'`

こうするとワンタッチで消せます。