我正在使用相同的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
答案 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