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

Как смонтировать определенный / proc для всех контейнеров Docker на хосте?

Я запускаю контейнеры 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, и ничего больше. Пожалуйста, дайте мне знать, как я могу это сделать.