🕵️

【Docker】docker composeで作成されたコンテナと匿名ボリュームの対応を調べる方法(小ネタ)

2023/08/19に公開

結論から

docker volume ls したら、わけのわからない文字列(ボリューム名)が並んだ人向け。

docker ps | grep [コンテナ名の一部]
# 出力結果から該当のコンテナIDを確認
docker inspect [コンテナID] -f  '{{range .Mounts}}{{.Name}}{{end}}'
# コンテナIDに対応した匿名ボリュームの名前が表示される。
# ボリュームが複数あり、出力結果が分かりづらい場合は、
# '{{range .Mounts}}{{.Name}}, {{end}}' とすればカンマ区切りで出力される。
# .Nameの箇所を.Sourceに変更すれば、マウント元(ホスト側)のパスが表示される。

詳細と他の活用方法

image側でボリュームを作成しつつ、docker-compose.ymlでボリュームに関する設定を明示的に行わない場合などに、 匿名ボリューム(anonymous volume) が作成されます。
明示的に名前を指定してボリュームを作成したほうがわかりやすい…のですが、そうはいかないときもあります。(自分が某OSSにあるdocker-compose.ymlを動かしたときがそうでした)

そんな時に
docker inspect [コンテナID] -f '{{range .Mounts}}{{.Name}}{{end}}'
を実行すれば、docker inspectコマンドの出力結果のうち、ボリュームの名前のみを出力してくれます。
docker volume lsの結果を見ても何が何だかわからないときにご活用ください。

個人的にはホスト側で保存先ディレクトリの中身を直接覗きたかったので、-f '{{range .Mounts}}{{.Source}}{{end}}'のほうをよく使っています。
他にも、-f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'で、コンテナに振られたIPアドレスを確認できるなど、-f (--format) はいろいろ応用できます。

欲しい情報をどうやって取り出すかわからないときは、ChatGPTに聞いてみると、いい感じの表現を教えてくれることもあります。

参考

https://zenn.dev/praha/articles/69b042d1519af0

Discussion