Я запускаю контейнеры Docker в контейнере LXD, и я заметил, что Docker монтирует свою собственную копию /proc
несмотря на то, что контейнер LXD поддерживает контейнеры /proc
файлы.
Например:
root@lxdcontainer:~# grep -c processor /proc/cpuinfo
1
root@lxdcontainer:~# grep MemTotal /proc/meminfo
MemTotal: 488280 kB
root@lxdcontainer:~# docker run -it ubuntu bash
root@fcd00479a2c1:/# grep -c processor /proc/cpuinfo
56
root@fcd00479a2c1:/# grep MemTotal /proc/meminfo
MemTotal: 263758600 kB
Как вы можете видеть выше, контейнеру LXD было выделено 1 ядро ЦП и около 500 МБ памяти. Однако контейнер Docker, который запускается внутри этого контейнера LXD, кажется, думает, что он имеет доступ ко всем 56 ядрам и 256 ГБ памяти на голом железе.
Я пробовал использовать LXCFS как показано ниже:
docker run -it \
-v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw \
-v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw \
-v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw \
-v /var/lib/lxcfs/proc/stat:/proc/stat:rw \
-v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw \
-v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw \
ubuntu:18.04 \
bash
Это сработало, и контейнер Docker показывает ресурсы ЦП и памяти, которые были выделены для контейнера LXD. Однако это необходимо указать вручную для каждого запускаемого контейнера Docker, и это невозможно, когда контейнеры Docker запускаются автоматически (например, когда создание узлов для настраиваемого кластера в Rancher).
Моя цель - заставить все контейнеры Docker работать в контейнере LXD, чтобы видеть только те ресурсы, которые были выделены контейнеру LXD, и ничего больше. Пожалуйста, дайте мне знать, как я могу это сделать.