daemon.json 本身不支持直接限制容器并发创建数,但可通过 systemd 的 TasksMax/LimitNProc 限制作业总数、containerd 的 throttler 插件实现 CRI 层创建速率限制(如 create_rate_limit=10.0)、外部代理层对 /containers/create 接口限流,以及 daemon.json 中 default-ulimits.nofile、max-concurrent-downloads 等辅助配置提升高并发稳定性。
daemon.json 本身不提供直接限制容器并发创建数的功能。docker 守护进程没有内置的“并发创建容器数”配额或速率限制配置项。但你可以通过组合系统级控制和 docker 配置,间接实现类似效果。
1. 使用 systemd 限制 Docker daemon 的并发能力
Docker daemon 作为 systemd 服务运行时,可通过其 unit 文件约束资源使用,间接抑制高并发创建行为(例如 fork 爆发、CPU/内存争抢导致的创建延迟或失败):
- 编辑 /etc/systemd/system/docker.service.d/override.conf(如不存在则新建)
- 添加以下限制(示例:限制同时活跃进程数 + 并发 fork 频率):
[Service] TasksMax=512 LimitNProc=512 LimitNOFILE=65536
说明:`TasksMax` 和 `LimitNProc` 会限制 docker daemon 进程及其子进程(含容器 init 进程)总数,当接近上限时,docker run 可能因无法 fork 新进程而阻塞或报 fork: Resource temporarily unavailable —— 这就形成了事实上的“并发创建瓶颈”。
2. 用容器运行时级限流(推荐:配合 containerd)
现代 Docker 默认使用 containerd 作为运行时。你可在 /etc/containerd/config.toml 中启用 throttler 插件(v1.7+ 支持),对容器创建(即 CreateContainer RPC)做速率限制:
- 确保 containerd 配置启用了
throttler(默认未启用) - 添加如下节(需重启 containerd):
[plugins."io.containerd.grpc.v1.cri".containerd]
[plugins."io.containerd.grpc.v1.cri".containerd.throttler]
enabled = true
# 每秒最多允许 10 次 CreateContainer 请求
create_rate_limit = 10.0
create_burst = 20
注意:该限流作用于 CRI 层,对 docker run、docker-compose up 均生效,是目前最贴近“限制并发创建数”的原生方案。
3. 外部代理层控制(适用于集群或 API 网关场景)
若容器创建均由统一入口触发(如 CI/CD 流水线、自研平台调用 Docker API),可在调用链前端加限流:
- Nginx 或 Traefik 对
POST /containers/create接口做请求速率限制 - 应用层使用令牌桶(如 Go 的
golang.org/x/time/rate)控制docker client调用频次 - 基于 Redis 实现分布式计数器,对单位时间内的
run操作做全局计数拦截
这种方式不依赖 daemon.json,但需要额外运维和开发成本,适合有统一调度入口的环境。
4. daemon.json 能做的相关辅助配置
虽然不能限并发数,但以下 /etc/docker/daemon.json 设置可提升高并发下的稳定性,避免因资源耗尽导致创建失败:
-
"default-ulimits": { "nofile": { "Name": "nofile", "Hard": 65536, "Soft": 65536 } }—— 防止文件描述符不足 -
"max-concurrent-downloads": 3—— 限制镜像拉取并发,减少 I/O 峰值 -
"live-restore": true—— 避免 daemon 重启中断已有容器,间接保障创建队列不雪崩
这些配置不设“创建数上限”,但能让并发创建更可控、更少失败。
不复杂但容易忽略:真正卡住并发创建的,往往是内核参数(如 kernel.pid_max、vm.max_map_count)和磁盘 I/O,建议搭配 docker info 和 dmesg -T | grep -i "out of memory\|fork" 排查根因。


















