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が出力される
  • -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」のデータは表示されない
      • 削除できている

リファレンス


Posted by futa