除了 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
我运行正在使用相同的 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