Назад | Перейти на главную страницу

Почему Docker-контейнер может проверять файловую систему хоста?

При проверке файловой системы контейнера докеров я использовал df -h для проверки файловой системы с точки зрения контейнера:

$ docker run -it busybox sh 
/ # df -h
Filesystem                Size      Used Available Use% Mounted on
overlay                  97.8G     78.7G     14.1G  85% /
tmpfs                    64.0M         0     64.0M   0% /dev
tmpfs                     7.8G         0      7.8G   0% /sys/fs/cgroup
/dev/sda2                97.8G     78.7G     14.1G  85% /etc/resolv.conf
/dev/sda2                97.8G     78.7G     14.1G  85% /etc/hostname
/dev/sda2                97.8G     78.7G     14.1G  85% /etc/hosts
shm                      64.0M         0     64.0M   0% /dev/shm
tmpfs                    64.0M         0     64.0M   0% /proc/kcore
tmpfs                    64.0M         0     64.0M   0% /proc/timer_list
tmpfs                    64.0M         0     64.0M   0% /proc/sched_debug
tmpfs                     7.8G         0      7.8G   0% /proc/scsi
tmpfs                     7.8G         0      7.8G   0% /sys/firmware

Что я вижу, когда бегу df -h на моем фактическом хосте:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            7.8G     0  7.8G   0% /dev
tmpfs           1.6G  9.6M  1.6G   1% /run
/dev/sda2        98G   79G   15G  85% /
tmpfs           7.8G   82M  7.8G   2% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/sda3       108G   34G   75G  31% /dev/sda5
/dev/sda1       511M   32M  480M   7% /boot/efi
tmpfs           1.6G   56K  1.6G   1% /run/user/1000

Неудивительно, что есть дополнительные другие файловые системы, смонтированные в контейнере механизмом докеров, однако я не ожидал, что контейнер сможет видеть / dev / sda2 и его использование. Вы можете объяснить такое поведение тем, что я не прилагал никаких томов? Я ожидал, что контейнер будет иметь изолированное представление о хосте, чтобы не «видеть» некоторые из его файловых систем.

У вашего фактического хозяина есть sda1, sda2, и sda3, в то время как ваш экземпляр докера имеет только sda2. Они тоже по-разному монтируются. Для вашего экземпляра докера:

/dev/sda2                97.8G     78.7G     14.1G  85% /etc/resolv.conf
/dev/sda2                97.8G     78.7G     14.1G  85% /etc/hostname
/dev/sda2                97.8G     78.7G     14.1G  85% /etc/hosts

Для вашего фактического хоста:

/dev/sda1       511M   32M  480M   7% /boot/efi
/dev/sda2        98G   79G   15G  85% /
/dev/sda3       108G   34G   75G  31% /dev/sda5

РЕДАКТИРОВАТЬ:

Наконец, их ценность использования сильно различается. Это явно разные устройства.

Значения использования совпадают для sda2. Возможно, этого не избежать. Насколько мне известно, Doker создавался не с учетом мультитенантности (например, услуг хостинга для третьих сторон), а скорее в духе DevOps, когда человек, обслуживающий контейнеры докеров, также имеет доступ к физическому хосту, поэтому я бы не стал. Я не вижу в этом огромной проблемы.