1:问题描述
今天在环境上执行docker ps命令失败,如下提示
[root@control02 ~]# docker ps -a lgrep nginx
Cannot connect to the Docker daemon at unix:///var/run/docker.sock, Is the docker daemon running?
2:查看节点docker状态
看信息提示是too many open files,句柄数不够导致的
3:查看节点的最大文件打开数
[root@control02 ~]# cat /proc/sys/fs/nr_open
1048576 ##单个进程最大文件打开数
[root@control02 ~]# cat /proc/sys/fs/file-max
26555622 ###系统级别的文件打开数
[root@control02 ~]#
4: 查看系统中已经使用的文件数
[rootacontrol2 -]#sysctl -a | grep "file-nr"
fs.file-nr = 75008 0 26555622 ###75008代表系统中已经使用的句柄数
也可以通过文件查看
[root@control02 ~]# cat /proc/sys/fs/file-nr
75008 0 26555622
通过上述结果查看,系统中文件打开数未达到最大值,由此判断可能是docker 进程文件打开数超过了限制
5:查看docker进程目前的文件打开数以及限制
有下图可知,docker进程的限制是65536
查看dokcer已经打开的文件打开数
[root@controle2 ~]# ls -l /proc/7273/fd/* | wc -l
65536 ###输出的值为65536,实际要使用的值已经超过了65536
6:动态修改当前Docker进程的nofile限制
prlimit --pid 14644 --nofile=655360:655360 #将Docker进程的nofile限制调整为655360
执行systemctl status docker命令查看服务正常
[root@control02 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1d0f25320719 nginx:1.15.12 "nginx -c /etc/nginx…" 7 weeks ago Up 7 weeks nginx
7:修改系统中进程打开的最大文件数
echo "10485760" > /proc/sys/fs/nr_open
或者修改内核参数
sysctl -w fs.nr_open = 10485760