使用lxcfs提高docker容器的资源可见性

问题

docker容器中,使用top,free等名称查看的资源使用情况不是容器自身的资源使用情况,而是宿主机的资源使用情况,这可能会令某些程序中依赖的第三方库运行在容器中时使用相同的渠道读取系统资源情况错误而导致崩溃
实际上,容器中使用top,free等命令是从宿主机的

1
2
3
4
5
6
/proc/cpuinfo
/proc/diskstats
/proc/meminfo
/proc/stat
/proc/swaps
/proc/uptime

中获取信息

为了避免这种情况,可以使用一个叫做lxcfs的服务提高资源可见性
lxcfs是一个常驻服务,它启动以后会在指定目录中自行维护与上面列出的/proc目录中的文件同名的文件,容器从lxcfs维护的/proc文件中读取数据时,得到的是容器的状态数据,而不是整个宿主机的状态。

使用

yum安装

wget https://copr-be.cloud.fedoraproject.org/results/ganto/lxd/epel-7-x86_64/00486278-lxcfs/lxcfs-2.0.5-3.el7.centos.x86_64.rpm yum install lxcfs-2.0.5-3.el7.centos.x86_64.rpm

启动

lxcfs /var/lib/lxcfs &

容器配置

docker run命令增加如下参数(可选部分)

1
2
3
4
5
6
-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 \

此时进入容器使用top,free等命令即可看到正常的资源使用情况