Last Updated on: 2025年10月16日
Dockerfileの中で永続化が必要なディレクトリ(ボリューム)としてVOLUMEを指定すると、-vまたはvolume:で明示的にマウントしないと匿名ボリューム(名前なしのボリューム)が作られます。匿名ボリュームが起動する度に新しく作成されるので放っておくとどんどん溜まります。
どのコンテナが匿名ボリュームを作っているのかはdocker inspectで判別出来るのですが、何度も、何度も、手動でやっているので今動作しているコンテナ全てのボリュームのマウント状態をダンプするスクリプトを作りました。(コンテナとDockerfileを見つけて明示的にマウントする方法もあるがこの方法は他人が書いたDockerfileだと探すのが面倒すぎる)
#!/usr/bin/env bash # すべてのコンテナ(停止中のものも含む)に対して実行 for container in $(docker ps -aq); do # コンテナ名とマウントされているボリューム名(名前付き/匿名問わず)を表示 echo "--- Container: $(docker inspect -f '{{.Name}}' $container) ---" docker inspect -f '{{range .Mounts}} Name: {{.Name}}, Destination: {{.Destination}}{{println .}}{{end}}' $container done
find_volume.shなどと名前を付けて実行すると
yohgaki@dev2:~/Docker/compose/gitlab-runner$ ../find_volume.sh
--- Container: /gitlab-runner-gitlab-runner-1 ---
Name: , Destination: /var/run/docker.sock{bind /var/run/docker.sock /var/run/docker.sock rw true rprivate}
Name: , Destination: /etc/gitlab-runner{bind /home/yohgaki/Docker/compose/gitlab-runner/fs/gitlab-runner/config /etc/gitlab-runner rw,Z true rprivate}
Name: 07f8873974463c152f6fe31fb925c381f53b82a61355ae3c9fd5369319604fb0, Destination: /home/gitlab-runner{volume 07f8873974463c152f6fe31fb925c381f53b82a61355ae3c9fd5369319604fb0 /var/lib/docker/volumes/07f8873974463c152f6fe31fb925c381f53b82a61355ae3c9fd5369319604fb0/_data /home/gitlab-runner local true }
--- Container: /portainer-portainer-1 ---
Name: , Destination: /var/run/docker.sock{bind /var/run/docker.sock /var/run/docker.sock rw,Z true rprivate}
Name: , Destination: /data{bind /home/yohgaki/Docker/compose/portainer/fs/data /data rw,Z true rprivate}
どのコンテナがどのvolumeをどのようにマウントしているか判ります。この例だとgitlab-runnerのDockerfileがVOLUMEで/home/gitlab-runnerを指定していて匿名ボリューうとしてマウントされていると判ります。
docker volume pruneで使っていないボリュームを丸ごと消しても構わないのですが、精神衛生上あまり良くないので匿名ボリュームを作らないようにした方が良いです。
Leave a Comment