除了 CPU 和内存之外,docker 的其他资源限制是什么?

What's other resource limitation of docker besides CPU & memory?

我运行正在使用相同的 docker 映像安装两个 docker 容器 vm1 和 vm2。两者都可以 运行 分别成功。但不能同时运行。我检查了 CPU 和内存。还有什么其他资源将 docker 限制为 运行 多个容器?

systemctl status docker 仅当 运行 'vm1' 时的结果。

   Tasks: 148
   Memory: 357.9M

systemctl status docker 仅当 运行 'vm2' 时的结果。

   Tasks: 140
   Memory: 360.0M

我的系统仍然包含大约 4GB 的可用 RAM,CPUs 也处于空闲状态。 当我 运行 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

systemctl status docker 结果当 运行 'vm1' 然后 'vm2'.

   Tasks: 244
   Memory: 372.2M

vm1 docker 运行 命令

  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 运行 命令

  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 运行 用户是 'guest',但我 运行 通过 sudo 以 'ap' 用户帐户编程。我发现容器内有不同的 'ulimit -u' 结果,运行-图像基于 centos:6

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

在我的例子中,我发现结果是由 'ap' 用户的默认 ulimit -u 只有 1024 引起的。当 运行 只有 vm1 或 vm2 时, 'ap' 用户的 process/thread count is under 1024. 当我运行 both vm1 and vm2, the total process count is greater than 1024.

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

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