Sudo docker run -it ubuntu:latest /bin/bash
を使用して単純なDockerコンテナーを実行します
マウントされたファイルシステムを調べると、df -h
、1つ
Filesystem Size Used Avail Use% Mounted on
overlay 63G 4.3G 56G 8% /
tmpfs 64M 0 64M 0% /dev
tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
/dev/sda1 63G 4.3G 56G 8% /etc/hosts
....
最後の行、つまり/dev/sda1 -> /etc/hosts
を理解できません。ホスト・マシンでdf -h
を実行すると、マウント/dev/sda1 -> /
が取得されます。
つまり、/dev/sda1
は実際には私のハードドライブです。なぜそれがコンテナの/etc/hosts
にマウントされているのですか、そしてなぜコンテナの/etc/hosts
は正しい内容のファイルなのですか。
ここで何が起こっているのか説明はありますか?これはどのように作動しますか?
編集:findmntの関連する出力:
`-/etc/hosts /dev/sda1[/lib/docker/containers/b18928987f05513ea9fcc9bd630e9efb0f92e51f48afd215426ba4cd83967fc1/hosts]
ext4 rw,relatime,data=ordered
Linuxでは、同じファイルシステムを複数のパスにマウント(binding)できます。また、既存のディレクトリを別のディレクトリにバインドしたり、ファイルを別のファイルにバインドしたりすることもできます。
これはシンボリックリンクと同様に使用されますが、コンテナまたはchrootの境界を越えることができます。ホストからのファイルがコンテナ内のファイルにバインドマウントされている場合でも、コンテナはそれにアクセスできます。
dfは、マウント情報を古い「mtab」形式で読み取るため、デバイスのみを表示します。古い「mtab」形式では、そのような情報について十分な情報がありません。 (ただし、ディレクトリのバインドマウントではまだ意味があります。)