除了CPU和DSP之外,还有什么是docker的其他资源限制?存储器?

时间:2018-04-12 09:58:01

标签: docker cgroups

我正在使用相同的docker镜像运行两个docker容器vm1和vm2。两者都可以单独运行。但不能同时运行。我检查了CPU和内存。什么是其他资源限制了docker运行多个容器?<​​/ p>

systemctl status docker仅在运行'vm1'时产生。

   Tasks: 148
   Memory: 357.9M

systemctl status docker仅在运行'vm2'时产生。

   Tasks: 140
   Memory: 360.0M

我的系统仍然包含大约4GB的可用RAM,CPU也是空闲的。 当我运行vm1然后运行vm2时,vm2将失败并显示一些日志:

[17:55:50.504452] connect(172.17.0.2, 2889) failed: Operation now in progress 

和其他日志一样

/etc/bashrc: fork: retry: Resource temporarily unavailable
运行'vm1'然后'vm2'时会产生

systemctl status docker

   Tasks: 244
   Memory: 372.2M

vm1 docker run命令

  exec docker run --rm -it --name vm1
    -e OUT_IP="$MYIP" \
    -h vm1 \
    -v /MyLib/opt:/opt:ro \
    -v /home/myid:/home/guest \
    -v /sybase:/sybase \
    -v /sybaseDB:/sybaseDB \
       run-image $*

vm2 docker run命令

  exec docker run --rm -it --name vm2
    -e OUT_IP="$MYIP" \
    -h vm2 \
    -v /MyLib/opt:/opt:ro \
    -v /home/myid:/home/guest \
    -v /sybase2:/sybase \
    -v /sybaseDB2:/sybaseDB2 \
       run-image $*

某些命令结果符合:fork: retry: Resource temporarily unavailable

# in host os
$ sysctl fs.file-nr
fs.file-nr = 4064 0 814022

# in docker container (vm2)
$ sudo su - guest
$ ulimit -Hn
1048576
$ sudo lsof -u guest 2>/dev/null | wc -l
230

docker run用户是'guest',但我通过'ap'用户帐户通过sudo运行程序。我发现容器内部有'ulimit -u'不同的结果,运行图像基于centos:6

$ sudo su - guest
$ ulimit -u
unlimited
$ sudo su - ap
$ ulimit -u
1024

1 个答案:

答案 0 :(得分:0)

在我的情况下,我发现结果是由'ap'用户的默认ulimit -u引起的仅为1024.当仅运行vm1或vm2时,'ap'用户的进程/线程数小于1024.当我同时运行时vm1和vm2,总进程数大于1024。

解决方案是扩大centos 6的默认用户nproc限制:

sudo sed -i 's/1024/4096/' /etc/security/limits.d/90-nproc.conf