LoginSignup
9
6

More than 3 years have passed since last update.

【Docker】Volumes(ボリューム)の中身を見る方法。ルート権限付きコンテナを起動する。

Posted at

Dockerのボリュームの中に入っているフォルダやファイルを確認する方法について。

確認方法

  1. docker volume inspectでvolumeのmountpoint(絶対パス)を確認する。
  2. イメージからルート権限付きのコンテナを起動する。
  3. コンテナ内のターミナルでlsコマンドを使う
volumeのmountpointの確認
#ボリューム一覧を表示
docker volume ls

#mountpointを確認
docker volume inspect [ボリューム名]
ルート権限付きのコンテナを起動し、ボリュームの中身を確認
#ルート権限つきコンテナ起動
$ docker run -it --privileged --pid=host [イメージ名] nsenter -t 1 -m -u -n -i sh

#ボリュームの中身を表示
/ # ls [mountpointの絶対パス]

#対話モード終了
/ # exit

以上の操作で、volumeの中身を確認することができる。


実例による確認手順

イメージの確認
$ docker images
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
tomcat                                          latest              35064a4fcc93        2 weeks ago         648MB
django_web                                      latest              7f0eff7ebc94        2 weeks ago         937MB
debian                                          latest              1510e8501783        5 weeks ago         114MB
python                                          3                   dfc47c6cee13        6 weeks ago         886MB
postgres                                        latest              817f2d3d51ec        7 weeks ago         314MB
vuecli                                          3                   4040959eab16        2 months ago        338MB
ボリューム一覧の表示
$ docker volume ls
DRIVER              VOLUME NAME
local               0adf7a2b08b8e09f74ffb7799716e48263f012612dc2047da1d7137a75f12b5d
local               vuecli3_vue-cli-node-volume
mountpointの確認
$ docker volume inspect vuecli3_vue-cli-node-volume
[
    {
        "CreatedAt": "2020-09-08T05:35:36Z",
        "Driver": "local",
        "Labels": {
            "com.docker.compose.project": "vuecli3",
            "com.docker.compose.version": "1.26.2",
            "com.docker.compose.volume": "vue-cli-node-volume"
        },
        "Mountpoint": "/var/lib/docker/volumes/vuecli3_vue-cli-node-volume/_data",
        "Name": "vuecli3_vue-cli-node-volume",
        "Options": null,
        "Scope": "local"
    }
]
docker対話モードに入る
$ docker run -it --privileged --pid=host [イメージ名] nsenter -t 1 -m -u -n -i sh
docker対話モード
/ # ls
EFI         boot        dev         home        lib         mnt         proc        run         srv         tmp         var
bin         containers  etc         init        media       opt         root        sbin        sys         usr
volumeの確認
/ # ls /var/lib/docker/volumes/micres_micres-node_modules2/_data
@babel                                       mime-db
@csstools                                    mime-types
@mdi                                         mimic-response
@nicolo-ribaudo                              mini-css-extract-plugin
@npmcli                                      minimalistic-assert
@rails                                       minimalistic-crypto-utils

ルート権限付きコンテナ起動の詳細

最も肝となる、ルート権限付きコンテナの起動コマンドが何をしているか。

>コマンド
$ docker run -it --privileged --pid=host [イメージ名] nsenter -t 1 -m -u -n -i sh`

-it
-t 擬似ターミナル(--tty)
-i 標準出力常時ON (--interactive)

--privileged
特権モード。ホストに対するルート権限が与えられた特別なコンテナを起動。

--pid=host
--pit= コンテナに対するPIDの名前空間を指定。
host コンテナ内でホスト側のPID名前空間を使う。

nsenter
Dockerで作った名前空間に入るためのコマンドラインツール。
「ENTER into Name Spaces」の頭文字の組み合わせ。



▼nsenterのオプション
-t
「--target pid」プロセスを指定する。ここでは1を指定。

-m
「--mount」 マウント名前空間(mount name space)を入力する。名前空間の指定がなければ、PIDで指定したプロセスを使用する。

-u
「-uts」 UTS名前空間を入力する。名前空間の指定がなければ、PIDで指定したプロセスを使用する。

utsはUnix Time Sharing略。

-n
「--net」 ネットワーク名前空間を入力する。名前空間の指定がなければ、PIDで指定したプロセスを使用する。

-i
「--ipc」 IPC名前空間を入力する。名前空間の指定がなければ、PIDで指定したプロセスを使用する。

要は、PID=1の処理でいろんな名前空間を立ち上げるらしい。

Linux nsenterオプション一覧

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6