【问题标题】:How does docker map host partitions?docker如何映射主机分区?
【发布时间】:2015-08-11 22:30:42
【问题描述】:

我对 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

【问题讨论】:

  • 听起来比 Stackoverflow 更适合 AskUbuntu 或超级用户。

标签: linux ubuntu docker containers


【解决方案1】:

问题一:为什么sdc6挂载在宿主机和容器的不同地方?

您主机上的/dev/sdc6/var,这是/var/lib/docker 所在的位置,也是Docker 保存某些数据的位置,例如分配给您的容器的hosts 文件。

hosts 文件在容器内作为绑定挂载公开,这就是您看到的原因:

/dev/sdc6        19G   13G  5.3G  70% /etc/hosts

问题2:为什么容器的根目录使用率这么高? docker 镜像上没有太多东西。

看看容器内的df输出:

rootfs           19G   13G  5.3G  70% /

现在查看主机上的df 输出,您会看到:

/dev/sdc6        19G   13G  5.3G  70% /var

容器内的df 反映了主机文件系统的状态。这表明您正在使用aufsoverlay 存储驱动程序,它们都在主机文件系统之上为容器创建“覆盖”文件系统。如果您使用的是 devicemapper 存储驱动程序,df 的输出看起来会有所不同,它依赖于设备映射器块设备而不是覆盖文件系统。

【讨论】:

  • 感谢您的回答。 /etc/hosts 不是主机名-ip 映射文件吗?为什么 /dev/sdc6 挂载到那里?
  • hosts 文件(是的,是主机名-ip 映射文件)由 Docker 创建,位于/var/lib/docker 中,位于/dev/sdc6 上。此文件绑定安装到容器中(如在mount --bind /some/file /some/other/path 中),这就是您在df 输出中看到/dev/sdc6 的原因。
猜你喜欢
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 2014-09-01
  • 2021-04-03
相关资源
最近更新 更多