docker容器内free显示内存大小问题


1、创建容器:限制容器内存大小为100m

docker run -d -t -m 100m --name test daocloud.io/library/node bash

dde6d64f4b0f27f0f485011af8872b86f582514833af11a6f5a727a3e38f36fb

2、进入到容器内用free命令查看总内存是979(主机内存大小),与限制的100m不一致,这是为什么呢?
root@dde6d64f4b0f:/# free -m
total used free shared buffers cached
Mem: 979 275 704 2 0 73
-/+ buffers/cache: 201 778
Swap: 2047 54 1993

docker -v

Docker version 1.8.2-el7.centos, build a01dc02/1.8.2

cat /etc/redhat-release

CentOS Linux release 7.1.1503 (Core)
已邀请:

徐新坤 - 京东商城-TIG-JDOS团队

赞同来自: linus_linux 王传义 styshoo


这是由于docker产生的容器的隔离性不足造成的。
docker创建容器时,会为容器提供一些必要的目录和文件,比如/proc下的若干文件。其中/proc/meminfo文件docker并没有直接提供其生成,而是将宿主机的/proc/meminfo挂载给了容器。
因此容器看到的/proc/meminfo与宿主机的/proc/meminfo的内容是一样的。而free命令也不过是查看该文件的信息而已。

如果想增强其隔离性,可以使用lxcfs的方式。

liguangcheng - 80后IT男

赞同来自:


Docker社区里有讨论过类似的问题,https://github.com/docker/docker/issues/8427,可以通过kernel patch或者bind mount /proc 来实现。 淘宝团队在几年前曾经发过一个kernel patch https://github.com/alibaba/tao ... patch

要回复问题请先登录注册