Docker 的 daemon.json 不支持配置集群运行参数,仅能设置与 Swarm 模式相关的底层通信和存储路径等基础项,集群拓扑、节点发现、服务调度等均由 docker swarm init/join 命令或 Kubernetes 等编排工具动态控制。
docker 的 daemon.json 不支持配置集群运行参数。这是关键前提。
Docker 原生的守护进程(dockerd)是单机容器引擎,它本身没有内置集群编排能力。所谓“集群运行参数”,比如节点发现、服务调度、跨主机网络、高可用协调等,属于 Docker Swarm 或 Kubernetes 这类编排系统的职责,而不是 dockerd 通过 daemon.json 能控制的范围。
✅ daemon.json 可配的、与集群“相关”的基础支撑项(仅限 Swarm 模式)
如果你使用的是 Docker 自带的 Swarm 模式(docker swarm init / join),daemon.json 中仅有极少数参数会影响 Swarm 节点行为,但它们不是集群逻辑参数,而是底层通信与安全准备项:
cluster-store和cluster-store-opts
已被弃用(自 Docker 1.12+ 起标记为 deprecated,17.06+ 完全移除)。现代 Swarm 使用内置 Raft 存储,不再依赖外部键值存储(如 etcd、Consul)。写入这些字段无效,且可能导致解析失败。-
hosts参数需显式暴露 TCP 监听(仅用于旧版 Swarm 或调试){ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"] }注意:启用
tcp://必须配合 TLS 认证(通过tls,tlscacert,tlscert,tlskey等参数),否则存在严重安全风险。生产环境不推荐裸开 TCP。 data-root和exec-root影响节点状态持久化位置
Swarm 的 Raft 日志、节点证书、锁等都存放在data-root下的swarm/子目录中。确保该路径有足够空间和稳定存储,但无需在daemon.json中为集群单独设值。
❌ 常见误解与错误配置(务必避开)
-
"cluster-advertise":已废弃,Docker 不再识别,写入会导致 JSON 解析失败或 daemon 启动异常。 -
"cluster-store"/"cluster-store-opts":同上,仅历史兼容,无实际作用。 -
"swarm"或"cluster"字段:daemon.json完全不支持这类字段,添加即报错。 - 试图在
daemon.json中指定 manager 节点地址、join token、自动发现机制等:全部无效——这些由docker swarm init和docker swarm join命令运行时动态生成并写入本地状态。
✅ 正确做法:集群参数应在哪里配?
| 场景 | 正确位置 | 说明 |
|---|---|---|
| 初始化 Swarm 集群 | docker swarm init --advertise-addr 192.168.1.10 --listen-addr 192.168.1.10:2377 |
所有集群拓扑、网络暴露、加密配置均由命令行参数决定 |
| 加入现有集群 | docker swarm join --token SWMTKN-1-xxx 192.168.1.10:2377 |
token 和 manager 地址不可通过配置文件预设 |
| 配置 Swarm 服务默认行为 |
docker service create 参数或 docker stack deploy 的 compose 文件 |
如 --replicas, --network, --publish, --placement 等 |
| 生产级集群管理 | 切换至 Kubernetes(kubeadm / EKS / K3s) | Docker Swarm 已停止功能更新,官方推荐迁移到 Kubernetes |
⚠️ 补充提醒:Swarm 模式当前状态
- Docker 官方自 2023 年起已明确将 Swarm 标记为“维护模式”(maintenance mode),不再新增特性,仅修复严重漏洞。
- 新项目强烈建议直接使用 Kubernetes;若必须用 Swarm,请接受其单集群、有限规模、无多租户隔离等事实。
不复杂但容易忽略:daemon.json 是单机引擎的配置中枢,不是集群控制器。集群逻辑永远发生在运行时命令或上层编排器中。


















