Docker の「ボリューム(bindではないボリューム)」の具体的な中身を見たり、中身をホストにコピーしたりしたいとき

結論

マウントするだけのコンテナを適当なイメージから作って、それを用いて中身を見たり $ docker container cp すればいいです。

よく記事で見る、特権を使って中身を覗く方法も手っ取り早いと思います*1

具体例

用いるイメージは Ubuntu 20.04 で特に問題ないと思うので、こんな感じでいいでしょう。

イメージの中身を見る方法

--rm オプションを付けているので、コンテナから抜けたら自動でコンテナが破棄されます。中身を見るだけならこれで十分だと思います。

$ docker container run --rm -v YOUR_VOLUME_NAME:/tmp/fugafuga-it ubuntu:20.04 /bin/bash
(コンテナ内に入る)
# ls /tmp/fugafuga

イメージの中身をホストにコピーする方法

bash で中に入る必要はないので、コンテナはただ起動するだけにします。

そしてその後、$ docker container cp foobar:/tmp/fuga/hogehoge.txt . などと実行して手元のホスト側に持ってきます。

$ docker container run -v YOUR_VOLUME_NAME:/tmp/fuga --name foobar ubuntu:20.04
$ docker container cp foobar:/tmp/fuga/hogehoge.txt .

コピーが終わったらコンテナは破棄しておきましょう。

$ docker container rm foobar
foobar

注意点

$ docker container cp コマンドに関しての注意点ですが、ワイルドカードは現状使えませんので、とりあえずはまるまる手元のホスト側に全部 $ docker container cp してからホスト側で処理するのがいいと思います。

コンテナ側でコピー対象のファイルを選別し、コピー専用のディレクトリを作ってそこに対象ファイルをコピー後、それをホスト側にもってくる、という手法もあります。

*1:ただしその方法だと $ docker container cp できないと思う

Powered by はてなブログ