Docker:【イメージ削除】競合エラーの対処
原因と対処
原因
- イメージ削除の条件
- 削除キーが一致するイメージがある
- イメージに紐づくコンテナがない
- 競合エラーの原因
- 削除しようとするイメージがコンテナ実行されている
- コンテナ実行履歴に残っている
対処
- 削除するイメージに紐づくコンテナ実行履歴をすべて削除
- 補足
- 強制的にイメージ削除する「-f」オプションもある
- 実行履歴が削除されず残るため今回の対処方法には選択しない
補足
- 競合エラーの考え方
- コンテナはイメージを基に実行
- そのため両者には依存関係がある
- イメージのみが存在する不整合な状態は回避した方がよい
- 不整合が起こる可能性を知らせる仕組みがconflict(競合)エラー
- 競合エラーを回避する予防策もある
- 参考
- 実行履歴を残さない方法
実行ログ
競合エラーの再現
イメージ表示
sudo docker images|sort
REPOSITORY TAG IMAGE ID CREATED SIZE alpine 3.5 f80194ae2e0c 3 years ago 4MB alpine latest c059bfaa849c 2 months ago 5.59MB dockersamples/static-site latest f589ccde7957 5 years ago 191MB hello-world latest feb5d9fea6a5 4 months ago 13.3kB ubuntu 12.04 5b117edd0b76 4 years ago 104MB
- docker images|sort
- イメージ一覧を表示
- REPOSITORY列が「alpine」、TAG列が「latest」のデータを確認
イメージ削除(競合エラー発生)
sudo docker rmi alpine
Error response from daemon: conflict: unable to remove repository reference "alpine" (must force) - container c5f4ac19bf32 is using its referenced image c059bfaa849c
- docker rmi alpine
- REPOSITORY名「alpine」、TAG名「latest」のイメージ削除を実行
- 補足
- TAG名を省略した場合「latest」が補完される
- 競合エラー
- 競合エラーを検知:Error response from daemon: conflict
- 削除できない:unable to remove repository reference “alpine"
- 削除できないイメージID:c059bfaa849c
- 競合関係にあるコンテナID:c5f4ac19bf32
- 補足
- 削除できない原因のコンテナIDが複数あっても1つしか出力されない
- エラーメッセージにあるコンテナIDを削除しても他に依存関係のコンテナIDがあれば再びエラーになる
コンテナ実行履歴表示
sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a7ee4ecb8865 alpine "/bin/sh" 40 hours ago Exited (0) 28 hours ago agitated_elbakyan ace71271902d alpine "/bin/sh" 40 hours ago Exited (0) 40 hours ago reverent_vaughan c5f4ac19bf32 alpine "/bin/sh" 40 hours ago Exited (0) 40 hours ago xenodochial_gould 114c9f74f04e alpine "echo 'hello from al…" 44 hours ago Exited (0) 44 hours ago gracious_galois 990f27013637 alpine "ls -l" 44 hours ago Exited (0) 44 hours ago vibrant_villani be19cc34d51b hello-world "/hello" 44 hours ago Exited (0) 44 hours ago condescending_almeida 13e8f94aab43 hello-world "/hello" 45 hours ago Exited (0) 45 hours ago gallant_lumiere e62a017fdc2d hello-world "/hello" 46 hours ago Exited (0) 46 hours ago magical_euclid
- docker ps -a
- イメージ削除の依存関係にあった「c5f4ac19bf32」が確認できる
- 他にも依存関係になりそうなコンテナIDがある
- a7ee4ecb8865、ace71271902d
- COMMAND列が同じなので、多分そう…
競合の解消とイメージ削除
コンテナ実行履歴削除
sudo docker rm -f c5f4ac19bf32
sudo docker ps -a
$ sudo docker rm -f c5f4ac19bf32 c5f4ac19bf32 $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a7ee4ecb8865 alpine "/bin/sh" 40 hours ago Exited (0) 28 hours ago agitated_elbakyan ace71271902d alpine "/bin/sh" 40 hours ago Exited (0) 40 hours ago reverent_vaughan 114c9f74f04e alpine "echo 'hello from al…" 44 hours ago Exited (0) 44 hours ago gracious_galois 990f27013637 alpine "ls -l" 44 hours ago Exited (0) 44 hours ago vibrant_villani be19cc34d51b hello-world "/hello" 44 hours ago Exited (0) 44 hours ago condescending_almeida 13e8f94aab43 hello-world "/hello" 45 hours ago Exited (0) 45 hours ago gallant_lumiere e62a017fdc2d hello-world "/hello" 46 hours ago Exited (0) 46 hours ago magical_euclid
- docker rm
- 競合エラーのメッセージに出力されたコンテナIDを削除
- 削除したコンテナID「c5f4ac19bf32」が出力される
- -f
- 実行中のコンテナがあれば停止した後削除するオプション
- docker ps -a
- コンテナ実行履歴を表示
- コンテナID「c5f4ac19bf32」は削除された(表示されない)
イメージ削除(別の競合エラー)
sudo docker rmi alpine
Error response from daemon: conflict: unable to remove repository reference "alpine" (must force) - container 990f27013637 is using its referenced image c059bfaa849c
- docker rmi alpine
- REPOSITORY名「alpine」、TAG名「latest」のイメージ削除を実行
- 補足
- TAG名を省略した場合「latest」が補完される
- 競合エラー
- 競合エラーを検知:Error response from daemon: conflict
- 削除できない:unable to remove repository reference “alpine"
- 削除できないイメージID:c059bfaa849c
- 競合関係にあるコンテナID:990f27013637(※さっきと違うID)
コンテナ実行履歴削除(関係のありそうなもの全部)
sudo docker rm -f a7ee4ecb8865 ace71271902d 114c9f74f04e 990f27013637
sudo docker ps -a
$ sudo docker rm -f a7ee4ecb8865 ace71271902d 114c9f74f04e 990f27013637 a7ee4ecb8865 ace71271902d 114c9f74f04e 990f27013637 $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES be19cc34d51b hello-world "/hello" 45 hours ago Exited (0) 45 hours ago condescending_almeida 13e8f94aab43 hello-world "/hello" 45 hours ago Exited (0) 45 hours ago gallant_lumiere e62a017fdc2d hello-world "/hello" 46 hours ago Exited (0) 46 hours ago magical_euclid
- docker rm
- 競合エラーのメッセージに出力されたコンテナIDを削除
- 「990f27013637」
- 関係のありそうなコンテナID(IMAGE列が「alpine」のもの)をすべて削除
- 「a7ee4ecb8865」「ace71271902d」「114c9f74f04e」
- 削除したコンテナIDが出力される
- 競合エラーのメッセージに出力されたコンテナIDを削除
- -f
- 実行中のコンテナがあれば停止した後削除するオプション
- docker ps -a
- コンテナ実行履歴を表示
- IMAGE列が「alpine」のコンテナ実行履歴はすべて削除された(表示されない)
イメージ削除
sudo docker rmi alpine
Untagged: alpine:latest Untagged: alpine@sha256:21a3deaa0d32a8057914f36584b5288d2e5ecc984380bc0118285c70fa8c9300 Deleted: sha256:c059bfaa849c4d8e4aecaeb3a10c2d9b3d85f5165c66ad3a4d937758128c4d18 Deleted: sha256:8d3ac3489996423f53d6087c81180006263b79f206d3fdec9e66f0e27ceb8759
- docker rmi alpine
- 競合エラーは発生しなかった
- イメージ削除が正常に完了
イメージ一覧表示
sudo docker images|sort
REPOSITORY TAG IMAGE ID CREATED SIZE alpine 3.5 f80194ae2e0c 3 years ago 4MB dockersamples/static-site latest f589ccde7957 5 years ago 191MB hello-world latest feb5d9fea6a5 4 months ago 13.3kB ubuntu 12.04 5b117edd0b76 4 years ago 104MB
- docker images|sort
- イメージ一覧表示
- REPOSITORY列が「alpine」、TAG列が「latest」のデータは表示されない
- 削除できている
リファレンス
- docker rmi | Docker Documentation
- docker rmiコマンド
