Dockerのボリュームの中に入っているフォルダやファイルを確認する方法について。
##確認方法
-
docker volume inspect
でvolumeのmountpoint(絶対パス)を確認する。 - イメージからルート権限付きのコンテナを起動する。
- コンテナ内のターミナルでlsコマンドを使う
#ボリューム一覧を表示
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
$ 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 run -it --privileged --pid=host [イメージ名] nsenter -t 1 -m -u -n -i sh
/ # ls
EFI boot dev home lib mnt proc run srv tmp var
bin containers etc init media opt root sbin sys usr
/ # 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の処理でいろんな名前空間を立ち上げるらしい。