尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Docker Classic Swarm `manage` 命令详解:创建高可用 Swarm Manager
云原生后端微服务【免费下载链接】classicswarmSwarm Classic: a container clustering system. Not to be confused with Docker Swarm which is at https://github.com/docker/swarmkit项目地址https://gitcode.com/gh_mirrors/cl/classicswarm点击查看免费下载manage是 Docker Classic Swarm本仓库classicswarm即经典版 Docker Swarm的核心子命令用于创建 Swarm manager——集群中负责接收 Docker 命令、并将容器调度到各 Swarm 节点上的控制平面组件。本文以 docs/reference/manage.md 为骨架结合仓库内 cli/manage.go、cli/flags.go、api/primary.go、api/replica.go 等源码实现完整讲解manage的语法、发现后端discovery参数、全部选项及其底层原理并给出可复制的 TLS 高可用部署示例。读完本文你将能够独立构建一个多 Manager 高可用集群、配置调度策略与过滤规则并为集群启用 TLS 双向认证。前置条件先建立 Discovery 后端manage创建的 manager 必须依赖一个发现后端discovery backend来感知集群成员。官方文档明确要求在使用manage之前必须先按 发现机制文档 建立好发现后端或用create命令 生成发现 token。从源码看这一约束是强制的在 cli/manage.go 中manage()函数会先通过getDiscovery(c)获取发现后端 URI若为空则直接log.Fatalf(discovery required to manage a cluster. See %s manage --help., ...)终止进程。因此discovery参数是manage唯一必填的参数。命令语法与典型用法manage的基本语法为$ docker run swarm manage [OPTIONS] discovery在仓库中manage子命令注册于 cli/commands.go支持-m简写其全部选项由 cli/flags.go 中的fl*系列 Flag 定义。典型示例一高可用集群中的 Manager$ docker run -d -p 4000:4000 swarm manage -H :4000 --replication --advertise 172.30.0.161:4000 consul://172.30.0.165:8500该命令的含义-d -p 4000:4000以守护进程方式运行容器并把容器内 manager 监听的 4000 端口映射到宿主机-H :4000manager 在本机所有 IP 的 4000 端口上监听ip省略时使用默认主机 IP--replication开启 manager 复制高可用--advertise 172.30.0.161:4000向其他 manager 宣告本 manager 的可达地址consul://172.30.0.165:8500使用 Consul 作为发现后端。典型示例二启用 TLS 双向认证的 Manager$ docker run -d -p 3376:3376 -v /home/ubuntu/.certs:/certs:ro swarm manage --tlsverify --tlscacert/certs/ca.pem --tlscert/certs/cert.pem --tlskey/certs/key.pem --host0.0.0.0:3376 token://$TOKEN该命令将 CA 证书、manager 证书与私钥以只读方式挂载进容器通过--tlsverify启用 TLS 并强制校验对端证书仅接受持有同一 CA 签发的证书的客户端、节点和其他 manager。关于 TLS 的完整部署流程可参考 docs/secure-swarm-tls.md。discovery参数选择发现后端discovery是manage唯一的位置参数支持以下后端格式后端格式说明发现 tokentoken://token由 Docker Hub 托管的发现服务生成用create命令获取。不推荐生产环境使用仅限测试/开发Consulconsul://ip1/path单个 Consul 节点要求 Consul 0.5.1 及以上Etcdetcd://ip1,ip2,ip3/path多个 Etcd 节点要求 Etcd 2.0 及以上静态文件file://path/to/file指向包含集群成员静态列表的文件ZooKeeperzk://ip1,ip2/path多个 ZooKeeper 节点要求 ZooKeeper 3.4.5 及以上节点列表[nodes://]iprange,iprangeIP 或 IP 范围加端口nodes://前缀可省略参数中各组成部分的含义token由 Docker Hub 托管发现服务生成的 token。注意 docs/reference/create.md 与 docs/discovery.md 均明确标注该托管服务已于 2019 年 6 月 19 日下线Deprecation Notice且原本就仅面向测试/开发场景生产环境应改用 K/V 存储后端ip1、ip2、ip3发现后端各节点的 IP 与端口号path可选同一后端服务多个集群时用不同 path 隔离各集群的键值存储空间path/to/file静态文件路径文件每行一个集群成员manager 或节点iprangeIP 地址或地址范围加端口例如10.0.0.[10:200]表示10.0.0.10到10.0.0.200。两个最简示例发现 tokentoken://0ac50ef75c9739f5bfeeaf00503d4e6eConsul 节点consul://172.30.0.165:8500discovery对应的环境变量为$SWARM_DISCOVERY。源码中getDiscovery()cli/flags.go的逻辑是若命令行传入了一个位置参数则直接采用否则回退读取SWARM_DISCOVERY环境变量。关于各后端的详细配置与file:///nodes://的完整示例包括10.0.0.[10:200]形式的 IP 范围写法参见 docs/discovery.md。需要特别说明静态文件与节点列表方式与 manager 复制replication不兼容需要高可用复制的集群必须使用 K/V 存储类发现后端。选项详解与源码印证--strategy— 调度放置策略用法--strategy value可选值spread— 将容器放置到可用资源最充裕的节点binpack— 尽量填满一个节点后再放置到下一个节点random— 随机选择节点。默认值为spread。在源码 scheduler/strategy/strategy.go 中注册了三种策略cli/flags.go 中flStrategy的默认值取strategy.List()[0]即spread。注意New()还保留了兼容别名传入binpacking会被自动归一为binpack。从实现看spread与binpack都通过 weighted_node.go 的weighNodes()计算 CPU 与内存占用率加权得分差异仅在于排序方向spread升序选择最空闲的节点spread.gobinpack降序选择最紧凑的节点binpack.go且二者都会跳过资源不足以容纳新容器的节点。完整策略说明与示例见 docs/scheduler/strategy.md。--filter,-f— 调度过滤器用法--filter value或-f value可选值health— 仅使用正在运行且与发现后端正常通信的节点port— 对带静态端口映射的容器仅使用对应端口未被其他容器或进程占用的节点dependency— 对声明了依赖的容器仅使用已存在相同依赖容器的节点affinity— 对声明了亲和性的容器仅使用已存在相同亲和性容器的节点constraint— 对声明了约束的容器仅使用满足相同约束的节点。过滤器可以叠加使用--filter value --filter value。注册表见 scheduler/filter/filter.go默认启用全部过滤器DefaultFilterNumber即注册的过滤器数量见 cli/flags.go。以health过滤器为例scheduler/filter/health.go它遍历候选节点并仅保留node.IsHealthy()为真的节点若一个健康节点都没有则返回ErrNoHealthyNodeAvailable。调度器整体流程为先filter.ApplyFilters过滤候选节点再交给strategy.RankAndSort排序打分scheduler/scheduler.go。过滤器的详细文档见 docs/scheduler/filter.md。--host,-H— 监听 IP/端口用法--host ip:port或-H ip:port指定 manager 监听入站消息的 IP 与端口。ip若用 0 填充或省略则使用默认主机 IP例如--host0.0.0.0:3376或-H :4000。对应环境变量为$SWARM_HOST。源码中flHostscli/flags.go是支持多次指定的 StringSlice Flag默认值为tcp://127.0.0.1:2375。manage()中对该切片做了偏移处理以规避 urfave/cli 的已知问题cli/manage.go随后交给api.NewServer(hosts, tlsConfig)启动 HTTP 服务。--replication— 启用 Manager 复制启用 primary/secondary manager 之间的复制primary 将集群信息镜像到 secondary当 primary 故障时secondary 可以升级为 primary。该选项需要配合--advertise使用源码会强制校验若开启--replication但未提供--advertise直接报错cli/manage.go--advertise必须是ip:port或hostname:port形式cli/manage.go主从选举仅支持 Consul、Etcd、ZooKeeper 这类 K/V 发现后端getCandidateAndFollower()会对后端类型做断言否则报Leader election is only supported with consul, etcd and zookeeper discovery.cli/manage.go。底层实现位于 api/primary.go 与 api/replica.goprimary 路由由api.NewPrimary构建并注册完整的 Docker Remote API 路由/containers/create、/images/...等replica 路由api.NewReplica只本地处理/_ping、/info、/debug等少量路径其余请求通过 HTTP hijack 转发给 primaryapi/replica.go。选举状态变化时run()与follow()两个 goroutine 分别处理当选/失去领导权与新 leader 通告cli/manage.go当选 leader 时还会启动cluster.NewWatchdog用于故障容器重调度。--replication-ttl— 领导锁释放延迟用法--replication-ttl delays指定 primary 失联后通知 secondary 的延迟秒数该通知触发选举、由某 secondary 接管为 primary。默认 15 秒文档值。源码 cli/manage.go 要求该值必须为正数注意 cli/flags.go 中 Flag 的默认值是20s两者略有出入实际生效值以你部署所用版本为准——配置时建议显式指定。--advertise,--addr— 宣告 Docker Engine 的 IP 与端口用法--advertise ip:port或--addr ip:port其他 manager 必须能通过该地址访问到本 manager。对应环境变量$SWARM_ADVERTISE。该选项在join命令中语义相同宣告 Docker Engine 地址Flag 定义见 cli/flags.go。TLS 相关选项选项说明--tls启用 TLS。若已用--tlsverify则无需再传--tlscacertpathCA 公钥证书路径如/certs/ca.pem指定后 manager 只信任持有同一 CA 签发证书的对端--tlscertpathmanager 自身证书路径CA 签发如/certs/cert.pem--tlskeypathmanager 私钥路径如/certs/key.pem--tlsverify启用 TLS 且校验对端只接受持有同一 CA 签发证书的 manager、节点与客户端与--tls二选一源码 cli/manage.go 对这些选项做了严格的组合校验使用--tls或--tlsverify时--tlscert与--tlskey必须提供--tlsverify还要求提供--tlscacert反之若传了tlscert/tlskey/tlscacert但没传--tls/--tlsverify也会直接报错退出。TLS 配置由loadTLSConfig()cli/manage.go加载验证模式下构建包含 CA 的CertPool并设置RequireAndVerifyClientCert非验证模式则置InsecureSkipVerify。该 TLS 配置会同时用于 manager API 服务和与各 Engine 节点、发现后端的加密通信。整体 TLS 部署方案见 docs/secure-swarm-tls.md。--engine-refresh-min-interval— Engine 刷新最小间隔用法--engine-refresh-min-interval intervals默认 30 秒。Engine refresh 指 primary manager 获取集群中某个 Engine 的最新信息并据此判断其健康状态若连接失败则标记为 unhealthy并按重试次数重试刷新重试成功则恢复 healthy否则停止重试并忽略该 Engine。源码中该值用于构造cluster.EngineOptscli/manage.go并作为刷新退避延迟的下界cluster/engine.go 中newDelayer。--engine-refresh-max-interval— Engine 刷新最大间隔用法--engine-refresh-max-interval intervals默认 60 秒。源码要求其不能小于最小间隔否则报max refresh interval cannot be less than min refresh intervalcli/manage.go。min/max 构成随机退避区间由 cluster/engine.go 的refreshLoop()周期触发每个周期刷新容器、镜像、卷、网络列表并每 5 分钟更新一次节点规格CPU/内存/Labels支持热插拔感知。--engine-failure-retry— Engine 失败重试次数用法--engine-failure-retry number默认 3 次。对应 Engine 健康状态机连续失败达到该阈值时Engine 从 healthy 转为 unhealthy 并触发engine_disconnect事件cluster/engine.go 的incFailureCount()HealthIndicator()则按失败占比返回 0100 的健康度分数该分数会直接影响spread/binpack策略的节点权重scheduler/strategy/weighted_node.go。--engine-refresh-retry— 已废弃已废弃改用--engine-failure-retry。源码中若显式传了非默认值会直接报错提示迁移cli/manage.go。--heartbeat— 心跳周期用法--heartbeat intervalsmanager 向 primary manager 发送心跳的间隔心跳表明本 manager 健康可达。默认 60 秒。该值同时是发现后端注册信息的刷新周期源码createDiscovery()用其解析 duration 并构造发现后端且强制要求心跳必须 ≥ 1 秒cli/manage.go。--api-enable-cors,--cors— 启用 Engine API 的 CORS 头用法--api-enable-cors或--cors。开启后primary 路由在响应中加入Access-Control-Allow-Origin: *、Access-Control-Allow-Methods等跨域头并为每条路由额外注册OPTIONS方法api/primary.go、api/primary.go。--cluster-driver,-c— 集群驱动用法--cluster-driver driver或-c driver可选值swarm— Docker Swarm 驱动默认mesos-experimental— Mesos 集群驱动。源码 cli/manage.go 目前只接受swarm传入其他值会报unsupported cluster并退出swarm驱动对应实现位于 cluster/swarm/cluster.go其NewCluster负责初始化 Engine 映射、调度器、发现后端监听与待处理容器队列并应用swarm.overcommit、swarm.createretry两个选项。--cluster-opt— 集群驱动选项可重复传入--cluster-opt value --cluster-opt value。取值如下选项默认值说明swarm.overcommit0.050.055%资源超卖比例。源码 cluster/swarm/cluster.go 校验其必须大于 -101 之间表示按比例超卖资源-10 之间则反而少用资源swarm.createretry00容器创建失败时的重试次数负数会被拒绝mesos.address—Mesos 绑定地址环境变量$SWARM_MESOS_ADDRESSmesos.checkpointfailoverfalsefalse启用 Mesos checkpointing重启的 slave 可重连旧 executor 并恢复状态更新代价是磁盘 I/O环境变量$SWARM_MESOS_CHECKPOINT_FAILOVERmesos.port—Mesos 绑定端口环境变量$SWARM_MESOS_PORTmesos.offertimeout30s30sMesos offer 超时环境变量$SWARM_MESOS_OFFER_TIMEOUTmesos.offerrefusetimeout5s5sMesos 对未使用资源的拒收超时环境变量$SWARM_MESOS_OFFER_REFUSE_TIMEOUTmesos.tasktimeout5s5sMesos 任务创建超时环境变量$SWARM_MESOS_TASK_TIMEOUTmesos.user—Mesos 框架用户名环境变量$SWARM_MESOS_USER注意当前仓库主线 cli/manage.go 只实现了swarm驱动分支Mesos 相关选项保留在文档与 Flag 定义中cli/flags.go实际使用 Mesos 驱动需确认你使用的构建版本是否包含对应实现。--discovery-opt— 发现后端选项用法--discovery-opt value可重复传入用于给发现后端传递配置典型场景是给 Consul/Etcd 分布式 K/V 存储配置 TLS 证书--discovery-opt kv.cacertfile/path/to/mycacert.pem \ --discovery-opt kv.certfile/path/to/mycert.pem \ --discovery-opt kv.keyfile/path/to/mykey.pem \源码getDiscoveryOpt()cli/manage.go要求每个选项必须是keyvalue形式并会为 K/V 后端自动补默认键路径kv.pathdocker/swarm/nodes若未显式指定。对应join、list命令同样支持该选项详见 docs/reference/join.md 与 docs/discovery.md 中的 TLS 一节。补充选项--refresh-on-node-filter与--container-name-refresh-filter这两个选项未在参考文档中逐一展开但已注册为manage的 Flagcli/commands.go源码中分别控制容器列表缓存刷新行为cli/manage.go--refresh-on-node-filter当收到带节点过滤条件的ContainerList请求时是否强制刷新缓存--container-name-refresh-filter当收到名称过滤器为该值时刷新缓存。对于大型集群合理利用这两个选项可以在缓存一致性与 API 性能之间取得平衡。从源码看manage的完整启动流程综合 cli/manage.gomanage()的执行顺序如下校验 TLS 选项组合加载 TLS 配置如启用校验刷新间隔与重试参数构造EngineOpts获取并创建发现后端校验 heartbeat ≥ 1s创建调度器strategy filters与swarm集群驱动实例启动 API 服务无--replication时直接用api.NewPrimary并启用 Watchdog有--replication时构建Candidate/Follower并并行运行选举与跟随循环进入server.ListenAndServe()阻塞监听。整体来看manage把API 网关 调度器 发现注册 健康监控 故障重调度全部收敛到一个进程内manager 之间通过 K/V 存储上的领导锁实现高可用这正是 Classic Swarm 控制平面的核心设计。有关命令总览可参考 docs/reference/swarm.md 与 docs/reference/index.md。赞分享云原生后端微服务【免费下载链接】classicswarmSwarm Classic: a container clustering system. Not to be confused with Docker Swarm which is at https://github.com/docker/swarmkit项目地址https://gitcode.com/gh_mirrors/cl/classicswarm点击查看免费下载相关推荐join 命令创建 Swarm 节点Classic Swarm 节点加入集群的完整指南join 命令创建 Swarm 节点Classic Swarm 节点加入集群的完整指南 导读 join 是 Docker Classic Swarm本仓库云原生后端微服务Docker Swarm 加入令牌管理详解docker swarm join-token 命令实战指南Docker Swarm 加入令牌管理详解docker swarm join token 命令实战指南 docker swarm join token 是 DCLI开发工具如何一条命令在Linux安装OpenResearch CLIorx安装教程如何一条命令在Linux安装OpenResearch CLIorx安装教程 OpenResearch CLI命令名为 orx 是一个本地优先的研究智能体工人工智能AI Agent深度研究自主智能体Agent 编排上一篇QuickMapServices3分钟掌握QGIS地图服务插件的终极配置技巧下一篇3个步骤如何用AI自动化助手彻底改变你的工作方式创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

fpinscala 数据结构篇:用模式匹配实现二叉树深度计算(Tree.depth 详解)

fpinscala 数据结构篇:用模式匹配实现二叉树深度计算(Tree.depth 详解)

示例工程 【免费下载链接】fpinscala Code, exercises, answers, and hints to go along with the book "Functional Programming in Scala" 项目地址: https://gitcode.com/gh_mirrors/fp/fpinscala 点击查看 免费下载 本文以 fpinscala 仓库《Function…

📅 2026/10/12 1:57:31
类和对象下:初始化列表,static成员,

类和对象下:初始化列表,static成员,

禁止转换的发生。引用成员变量,const成员变量,没有默认构造的类型变量必须用初始化列表初始化每个类都必须有一个拷贝初始化构造函数,如果类中没有说明拷贝构造函数,则编译器系统会自动生成一个缺省拷贝构造函数,作为该…

📅 2026/10/12 1:57:31
Apache Beam Java Top 变换详解:全局与按 Key 求 Top N 聚合

Apache Beam Java Top 变换详解:全局与按 Key 求 Top N 聚合

【免费下载链接】beam Apache Beam is a unified programming model for Batch and Streaming data processing. 项目地址: https://gitcode.com/gh_mirrors/beam18/beam 点击查看 免费下载 Top 是 Apache Beam Java SDK 中用于求最大值/最小值集合的核心聚合变换&…

📅 2026/10/12 1:57:31
MORE NEWS

更多资讯

📰

短视频配音工具哪个好用

说明本文基于公开产品体验与多方使用反馈整理,不含任何商业合作,仅作为选型参考。文中产品均按公开信息描述,具体功能以各平台官方页面为准。结论先看短视频配音工具没有哪个绝对最好,选型的核心就是场景匹配。已经在用剪映做视频…

📰

微信自动回复突然全停了?五个检查点从外到内

早上打开后台的那一刻就知道不对劲:一整夜的咨询,一条自动回复都没有,买家的消息静静躺在列表里。自动回复「全停」和「偶发漏答」是两种问题——偶发漏答多半是词表的事,全停基本是链路断了。排查顺序很重要:从外到内…

📰

影刀RPA数字员工入门:从零搭建自动化流程实战手册

影刀RPA这两年在大众视野里出镜率越来越高,"数字员工"这个概念听起来也够玄乎。说白了,就是你电脑里的那些重复劳动——每天登录后台下载报表、把A系统数据搬到B系统、给几十个客户回邮件——都可以让一个按你指令行事的软件机器人来干。你可以…

📰

BLE SMP 抓包实战

BLE SMP 基础 BLE SMP 抓包实战 —— LESC Passkey Entry 逐包判读一、配对触发与特性交换(Phase 1)1.1 Security Request(0x0b)1.2 Pairing Request(0x01)1.3 Pairing Response(0x02&#xff0…

📰

v-charts 高级属性实战:extend 配置扩展、afterConfig 钩子与加载/空数据状态管理

前端数据可视化UI组件 【免费下载链接】v-charts 基于 Vue2.0 和 ECharts 封装的图表组件📈📊 项目地址: https://gitcode.com/gh_mirrors/vc/v-charts 点击查看 免费下载 v-charts 是基于 Vue2.x 与 ECharts 封装的图表组件库,本…

📰

Semantic Router Adaptation 在线模型选择学习机制详解:配置、评分算法与可观测性

后端API网关模型推理服务AI Agent 【免费下载链接】semantic-router An open, programmable decision layer for models and compute. 项目地址: https://gitcode.com/gh_mirrors/sem/semantic-router 点击查看 免费下载 导读 Adaptation(自适应&#…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬