问题
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
等命令即可看到正常的资源使用情况