Dockerのボリュームを使用しているコンテナを確認する
Dockerでいくつもサービスを運用している場合、このボリュームはどのコンテナで使用していたかな?となる場面があるかと思います。
今回はボリュームを利用しているコンテナを確認する方法についてまとめました。
確認用の環境の準備
まずは確認用のボリュームとコンテナを作成するスクリプトを用意します。
このスクリプトではコンテナを5つ作成してボリュームをマウントします。それぞれのコンテナと利用しているボリュームの一覧は以下です。
コンテナ名 | ボリューム |
---|---|
container1 | volume1 |
container2 | volume1 |
container3 | volume1 |
container4 | volume1, volume2 |
container5 | 名前なしvolume, volume2 |
つづいて確認用の環境を準備します。以下のコマンドでDocker上にDockerが動くコンテナを作成します。(先ほどのスクリプトはカレントディレクトリに配置しておきます)
docker container run --privileged --rm -d \
-v ${PWD}/setup-containers.sh:/setup-containers.sh:ro \
--name docker-test \
docker:dind
確認用のコンテナが作成できたら以下のコマンドでシェルを起動します。
docker exec -it docker-test sh
シェルが起動できたら確認用のボリュームとコンテナを作成するスクリプトを実行します。
sh /setup-containers.sh
特定のボリュームを利用しているコンテナを表示する
まずはコンテナの一覧を表示するdocker container ls
コマンドのfilter
オプションでボリュームを利用しているコンテナを絞り込む方法です。
特定のボリュームを利用しているコンテナを確認する場合はこの方法が一番簡単ではないでしょうか。
docker container ls --filter volume=volume1
以下のように出力されます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7ba8013a0f90 alpine "/bin/sh" 2 minutes ago Up 2 minutes container4
56b502afa615 alpine "/bin/sh" 2 minutes ago Up 2 minutes container3
100ade528384 alpine "/bin/sh" 2 minutes ago Up 2 minutes container2
36d4868a4f53 alpine "/bin/sh" 2 minutes ago Up 2 minutes container1
そのほかのオプションなどの詳細はman docker-container-ls
で確認することができます。
コンテナごとに利用しているボリュームの一覧を表示する
つづいてコンテナごとに利用しているボリュームの一覧を表示したい場合を考えてみました。
docker inspectコマンドを利用する方法
docker inspect
コマンドの--format
オプションを利用した以下のコマンドで表示させることができました。
docker inspect $(docker container ls -aq) \
--format '{{ .Name }}{{ range .Mounts }}{{ with .Name }} {{ . }}{{ end }}{{ end }}'
docker inspect
コマンドには$(docker container ls -aq)
を利用してすべてのコンテナのコンテナIDを指定しています。またボリュームにName
がある場合のみ出力するようにしてみました。
結果は以下のように出力されます。
/container5 volume2 3fd05b866f9f09f7e81b36565231117a4681fda2f75d32df21af273bdb1b90fe
/container4 volume1 volume2
/container3 volume1
/container2 volume1
/container1 volume1
ボリューム名の長さがまちまちで表示をそろえたい場合はcolumn -t
をパイプでつなげればいい感じに表示されます。
docker container lsコマンドを利用する方法
docker container ls
コマンドの--format
オプションで.Mounts
を出力することで表示させることができました。
docker container ls --no-trunc \
--format 'table {{ .ID }}\t{{ .Image }}\t{{ .Status }}\t{{ .Names }}\t{{ .Mounts }}'
表示が切り詰められないように--no-trunc
オプションを指定したのと--format
オプションの出力はtable
を利用してテーブル形式としました。
CONTAINER ID IMAGE STATUS NAMES MOUNTS
f0aa6cd9c4f80766dc57aadcf7e9700dbcb07e83635f1ab8900b7b61de700fa7 docker:dind Up 12 minutes docker-test /home/user/setup-containers.sh,477eb0cda9916c336fbdc325c1d5da5e4c500d3d6f007bf3e911500453af8692
--format
オプションで利用できる関数などの機能は以下のリファレンスを参照ください。
CLI and log output formatting reference
上記のリファレンスにありますが--format
オプションで利用できるキー名を確認する場合は以下のコマンドが便利です。
docker container ls --format='{{json .}}'
まとめ
今回はDockerのボリュームを利用しているコンテナを確認する方法についてまとめました。今回調べてみただけでも色々な確認方法があり、ほかにもたくさんの方法があると思います。
また--format
オプションはGo templatesなので工夫次第で便利に活用できそうです。