要限制 Docker 守护进程自身能打开的文件数,需调整 dockerd 进程的资源限制:优先通过 systemd 配置 LimitNOFILE,其次检查 /etc/security/limits.conf 中 root 用户设置,切勿混淆容器级 ulimit 或系统级 file-max。

要限制 Docker 守护进程(dockerd)自身能打开的文件数,关键不是改容器设置,而是调整 dockerd 进程启动时的资源限制——它本身是一个 Linux 进程,其 nofile 由宿主机的 systemd 服务配置或 ulimit 环境控制。
修改 systemd 服务配置(推荐)
Docker 在大多数 Linux 发行版中由 systemd 管理。直接为 docker.service 设置文件描述符上限最可靠:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 运行
sudo systemctl edit docker创建覆盖配置文件 - 填入以下内容(例如设软硬限均为 1048576):
[Service] LimitNOFILE=1048576 LimitNOFILESoft=1048576
- 保存后执行
sudo systemctl daemon-reload && sudo systemctl restart docker - 验证:用
cat /proc/$(pgrep dockerd)/limits | grep "Max open files"查看生效值
检查并调整宿主机全局 limits.conf(辅助手段)
如果 systemd 未显式覆盖,dockerd 可能继承 root 用户的 limits。确保 /etc/security/limits.conf 包含:
root soft nofile 1048576root hard nofile 1048576- 注意:该配置仅在
dockerd以 login shell 方式启动时生效(如非 systemd 环境),现代系统中优先走 systemd
避免常见误区
别混淆这几个层级:
-
--ulimit nofile=...或default-ulimits:只影响容器内进程,对dockerd自身无效 -
/proc/sys/fs/file-max:是整个系统的文件句柄总量天花板,需足够大但不等于dockerd的进程限制 - 容器内看到的
ulimit -n值高 ≠dockerd自身资源充足;大量容器仍可能压垮守护进程的文件句柄池

















