我对 docker 比较陌生,当我启动一个容器(一个 ubuntu 基础镜像)时,我注意到以下内容:
在主机上,
$ df -h
...
/dev/sdc1 180M 98M 70M 59% /boot
/dev/sdc2 46G 20G 24G 46% /home
/dev/sdc5 37G 7.7G 27G 23% /usr
/dev/sdc6 19G 13G 5.3G 70% /var
$ lsblk
...
sdc 8:32 0 232.9G 0 disk
├─sdc1 8:33 0 190M 0 part /boot
├─sdc2 8:34 0 46.6G 0 part /home
├─sdc3 8:35 0 18.6G 0 part /
├─sdc4 8:36 0 1K 0 part
├─sdc5 8:37 0 37.3G 0 part /usr
├─sdc6 8:38 0 18.6G 0 part /var
├─sdc7 8:39 0 29.8G 0 part [SWAP]
└─sdc8 8:40 0 42.8G 0 part
在容器上
$ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 19G 13G 5.3G 70% /
none 19G 13G 5.3G 70% /
tmpfs 7.8G 0 7.8G 0% /dev
shm 64M 0 64M 0% /dev/shm
/dev/sdc6 19G 13G 5.3G 70% /etc/hosts
tmpfs 7.8G 0 7.8G 0% /proc/kcore
tmpfs 7.8G 0 7.8G 0% /proc/latency_stats
tmpfs 7.8G 0 7.8G 0% /proc/timer_stats
$ lsblk
sdc 8:32 0 232.9G 0 disk
|-sdc1 8:33 0 190M 0 part
|-sdc2 8:34 0 46.6G 0 part
|-sdc3 8:35 0 18.6G 0 part
|-sdc4 8:36 0 1K 0 part
|-sdc5 8:37 0 37.3G 0 part
|-sdc6 8:38 0 18.6G 0 part /var/lib/cassandra
|-sdc7 8:39 0 29.8G 0 part [SWAP]
`-sdc8 8:40 0 42.8G 0 part
问题一:为什么sdc6
挂载在宿主机和容器的不同地方?
因为两个挂载点的内容不一样,所以我猜docker一定是对容器做了某种设备映射,所以容器里的sdc6
和那个不一样在主机上。但是,分区容量和用途是相同的,所以我在这里感到困惑。
问题2:为什么容器的根目录使用率这么高? docker 镜像上没有太多东西。
感谢您的帮助。
添加
Dockerfile有一行
VOLUME /var/lib/cassandra
最佳答案
Question 1: why is sdc6 mounted on different places between the host and the container?
/dev/sdc6
在你的主机上是 /var
,这是 /var/lib/docker
所在的地方,Docker 保持一定的位置数据,例如分配给容器的 hosts
文件。
hosts
文件作为容器内的绑定(bind)挂载公开,这就是您看到的原因:
/dev/sdc6 19G 13G 5.3G 70% /etc/hosts
Question 2: why is the container's root dir usage so high? The docker image doesn't have much stuff on it.
看看容器内的 df
输出:
rootfs 19G 13G 5.3G 70% /
现在查看主机上的 df
输出,您会看到:
/dev/sdc6 19G 13G 5.3G 70% /var
容器内的 df
反射(reflect)了主机文件系统的状态。这表明您正在使用 aufs
或 overlay
存储驱动程序,它们都在主机文件系统之上为容器创建“覆盖”文件系统。如果您使用 devicemapper
存储驱动程序,df
的输出会有所不同,它依赖于设备映射器 block 设备而不是覆盖文件系统。
关于linux - docker如何映射主机分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31953114/