docker imagesに表示される<none>を消す。dangling

by codechord. 0 Comments

  • このエントリーをはてなブックマークに追加
  • このエントリーをはてなブックマークに追加

Dockerを使っているといつのまにかディスク容量をくっているので、たまには整理しようと、「$ docker images」を実行し、これまでに作成したDockerイメージの一覧を見て確認している。その際に表示される、<none>のdockerイメージは削除してよいのか?noneイメージってなんなのか?という話。

Dockerfileを作成時に、「$ docker build -t <イメージ名> .」と、何回もbuild繰り返しやり直していると次のように、<none>のdockerイメージがそのビルド回数分作成されてしまう。

次の例は、`ABCDEFG`というイメージを作成したケース。

$ docker build -t ABCDEFG .
$ docker build -t ABCDEFG .
$ docker build -t ABCDEFG .
$ docker build -t ABCDEFG .
...何回か繰り返す...
$ docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
ABCDEFG                            latest              71547db82392        1 days ago          677MB
<none>                             <none>              ffbe5d858c4e        2 days ago          677MB
<none>                             <none>              79904623c4eb        3 days ago          677MB
<none>                             <none>              b7a1b6a4720f        4 days ago          677MB
<none>                             <none>              d042bb8aeb8d        5 days ago          677MB
<none>                             <none>              2825c68d9cd6        6 days ago          677MB
<none>                             <none>              541b7c464c7a        7 days ago          677MB
yyyyyyyyyy                         latest              55d38f05f234        8 days ago          951MB
zzzzzzzzzz                         2.5-7.3             f46add99cf6d        9 days ago          833MB

<none>とは何?

Dockerでは同一名のイメージを複数作成することができない。
すでに存在するイメージと同一名のDockerイメージを作成しようとした場合は、次のような挙動となる。

  1. 最新のビルド結果のイメージが、指定のイメージ名称となる。(上記例の場合はABCDEFG)
  2. すでに存在していた同一名称のイメージは、<none>という名称未設定の状態に置き換わる

この症状のことを、dangling(宙ぶらりん)という。

danglingのイメージを削除

dangling状態のイメージは特別な理由がないかぎり不要なので、イメージを削除するとよい。

# 特定のイメージ削除
$ docker rmi <dangling状態のDockerイメージID>

すべてのdangling状態のイメージを削除したい場合には次のとおりで、一括削除可能

$ docker rmi $(docker images -f 'dangling=true' -q)
もしくは
$ docker image prune

イメージを削除できない場合

イメージを削除できない場合は、そのdangling状態のイメージに紐付いているコンテナが存在している場合がある。
その場合は、先にコンテナも削除する必要がある場合があるので注意。

コンテナの削除は次の通りです。

$ docker rmi 79904623c4eb
Error response from daemon: conflict: unable to delete 79904623c4eb (must be forced) - image is being used by stopped container 3abd7274adfd

$ docker ps -a
...
# 上記で該当コンテナ(3abd7274adfd)を確認して、
# 削除しても問題なければコンテナとイメージを削除する。
$ docker rm 3abd7274adfd
$ docker rmi 79904623c4eb
Deleted: sha256:xxxxxxxxxxxxxxxxxxxxx
Deleted: sha256:xxxxxxxxxxxxxxxxxxxxx
...

参考ページ


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA