linux - docker如何映射主机分区?

标签 linux ubuntu docker containers

我对 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)了主机文件系统的状态。这表明您正在使用 aufsoverlay 存储驱动程序,它们都在主机文件系统之上为容器创建“覆盖”文件系统。如果您使用 devicemapper 存储驱动程序,df 的输出会有所不同,它依赖于设备映射器 block 设备而不是覆盖文件系统。

关于linux - docker如何映射主机分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31953114/

相关文章:

swing - java jlabel在Windows中工作,但在Linux中不工作,在屏幕上显示旧格式,openjdk?

python - ubuntu: 'geckodriver' 可执行文件需要在 PATH 中

docker - 如何使用 OpenRC (Alpine) 在 Docker 中自动启动服务?

Docker-compose,远程上下文,相对于本地机器而不是远程的路径

ubuntu - 无限 .sh 文件 Python

docker - HEALTHCHECK启动容器进程导致无效的环境USERNAME

linux - 如何在 Linux Mint 中构建 evpp

linux - 从apt-get install进行安装时,鹦鹉4.7上存在wireguard-dkms错误

linux - bash Linux 中的编号字符串

linux - ftok() 中的这个 "project identifier"是什么?