解决 Docker 的 Accept error: accept unix /run/docker.sock: accept4: too many open files 问题
一、问题描述
执行 docker ps -a 命令的时候,输出如下内容:
[root@node01 ~]# docker ps -a
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
通过 sudo systemctl status docker 命令检查 Docker 守护进程是否处于活动状态的时候,发现输出中有 “ … http: Accept error: accept unix /run/docker.sock: accept4: too many open files; … ” 相关信息,具体如下:
[root@node01 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/docker.service.d
└─override.conf
Active: active (running) since Mon 2026-01-26 09:34:48 CST; 2h 1min ago
Docs: https://docs.docker.com
Main PID: 8080 (dockerd)
......
Jan 26 09:08:36 node01 dockerd[19477]: 2026/01/26 09:08:36 http: Accept error: accept unix /run/docker.sock: accept4: too many open files; retrying in 1s
......
二、问题原因
“ … http: Accept error: accept unix /run/docker.sock: accept4: too many open files … ” 这段信息表明了 Docker 守护进程(dockerd)此时已经达到了系统对 “打开文件描述符数量” 的限制,无法再接受新的连接了。
之所以会这样,是由于 Linux 系统对每个进程能打开的文件描述符(file descriptors, FDs)的数量事有限制的。这个限制分为两类:
- soft limit(软限制):当前生效的限制,可由用户自行调整(但不能超过 hard limit)。
- hard limit(硬限制):上限,只有 root 或具有 CAP_SYS_RESOURCE 权限的进程才能提高。
三、解决方案
【步骤一】临时提高 Docker 进程的文件描述符限制
编辑 systemd 的 Docker 服务配置,执行如下命令:
sudo systemctl edit docker
在打开的编辑器中输入如下内容:
[Service]
LimitNOFILE=65536
保存并退出。
重新加载 systemd 并重启 Docker,依次执行如下命令:
sudo systemctl daemon-reload
sudo systemctl restart docker
【步骤二】永久修改系统级限制
编辑 /etc/security/limits.conf,执行如下命令:
vim /etc/security/limits.conf
在打开的文件中添加如下内容:
* soft nofile 65536
* hard nofile 65536
root soft nofile 65536
root hard nofile 65536
【步骤三】为容器配置日志轮转
容器数量较多或日志文件较大,也有可能导致 FD 消耗殆尽。我们通过配置日志轮转来限制日志的数量和大小。
编辑 /etc/docker/daemon.json 文件,执行如下命令:
vim /etc/docker/daemon.json
在打开的文件中添加如下内容:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
重启 Docker,执行如下命令:
sudo systemctl restart docker
【步骤四】验证修复结果
重启 Docker 后,再次检查状态(看还有没有再输出 “… accept4: too many open files …” 相关信息了),执行如下命令:
systemctl status docker
更多推荐



所有评论(0)