我在 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 容器的资源,而看不到其他资源。请告诉我如何做到这一点。