如何为主机上的所有 Docker 容器挂载特定的 /proc?

如何为主机上的所有 Docker 容器挂载特定的 /proc?

我在 LXD 容器中运行 Docker 容器,我注意到/proc尽管 LXD 容器具有容器感知/proc文件,但 Docker 仍挂载了它自己的副本。

例如:

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 个 CPU 核心和约 500MB 内存。然而,在此 LXD 容器内运行的 Docker 容器似乎认为它可以访问裸机主机上的所有 56 个核心和 256GB 内存。

我曾尝试使用龙芯如下所示:

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 容器的 CPU 和内存资源。但是,这需要为每个启动的 Docker 容器手动指定,而当 Docker 容器自动启动时(例如,当在 Rancher 中为自定义集群创建节点)。

我的目标是让所有在 LXD 容器中运行的 Docker 容器仅看到已分配给 LXD 容器的资源,而看不到其他资源。请告诉我如何做到这一点。

相关内容