Docker Stack 编排需启用 Swarm 模式,命令集成于 Docker 引擎;支持 Compose 文件 v3.x(如 3.8),依赖 docker-compose.yml,通过 docker stack deploy 等命令部署管理,仅 manager 节点可执行。

Docker 堆栈(Stack)的编排操作不需要额外安装工具,它直接集成在 Docker 引擎中,但前提是必须启用 Swarm 模式。查阅和使用 Stack 相关命令最直接的方式是通过 Docker 自带的帮助系统,同时结合官方支持的 Compose 文件规范。
查看 Stack 命令帮助
在终端中运行:
docker stack --help
这条命令会列出所有可用的 docker stack 子命令及其简要说明,比如 deploy、ls、ps、rm、services 等。
如果想了解某个子命令的详细用法,例如 docker stack deploy,可以继续加 --help:
docker stack deploy --help
它会显示参数说明,如 -c(指定 Compose 文件路径)、--resolve-image(镜像解析策略)、--prune(清理未定义服务)等关键选项。
Stack 编排依赖的核心文件是 docker-compose.yml
Stack 不识别 version: "2" 的旧格式,只支持 Compose 文件版本 3.x(如 version: '3.8')。一个最小可用示例:
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
deploy:
replicas: 2
db:
image: postgres:14
environment:
POSTGRES_PASSWORD: example
deploy:
placement:
constraints:
- node.role == manager注意:
- 所有镜像必须已存在本地或可被集群节点拉取(Stack 不支持
build:指令) -
deploy部分是 Swarm 特有配置,决定副本数、资源限制、滚动更新策略等 - 网络、卷等声明会自动创建为 Swarm 范围内共享资源
快速验证 Stack 是否可用
确保 Swarm 已初始化(单机测试也需此步):
docker swarm init
然后部署:
docker stack deploy -c docker-compose.yml mystack
部署后,用这些命令观察状态:
-
docker stack ls→ 查看当前运行的堆栈列表 -
docker stack services mystack→ 列出该堆栈下的所有服务 -
docker stack ps mystack→ 查看每个服务任务(task)在哪些节点上运行、状态是否为Running
常见易忽略点
- Stack 命令只能在 Swarm manager 节点执行,worker 节点无法调用
- 修改
docker-compose.yml后再次docker stack deploy即自动更新,无需手动删旧再部署 - 若服务没反应,优先检查
docker stack ps mystack中 task 的CURRENT STATE(如Rejected通常表示端口冲突或镜像拉取失败)
不复杂但容易忽略。
















