Docker Stack部署报错:configs不允许content属性求助
问题
我的Docker版本为25.0.5(客户端和服务端一致),Docker Compose版本为v2.29.1,已完成Swarm初始化。使用如下简单Compose文件:
configs: cfg: content: This is my content
执行docker stack config或docker stack deploy命令时均报错:
# docker stack config -c cfg.yaml configs.cfg Additional property content is not allowed # docker stack deploy -c cfg.yaml p1 configs.cfg Additional property content is not allowed
根据Docker官方文档,content和environment属性在Compose v2.23.1版本中新增,我当前使用的版本满足要求,且尝试v2.23.1、v2.23.2版本后仍出现相同错误。另外通过tcpdump发现,错误来自客户端(Docker Compose),未请求服务端。请问我忽略了什么?
附版本信息:
# docker version Client: Version: 25.0.5 API version: 1.44 Go version: go1.21.8 Git commit: 5dc9bcc Built: Tue Mar 19 15:04:17 2024 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 25.0.5 API version: 1.44 (minimum version 1.24) Go version: go1.21.8 Git commit: e63daec Built: Tue Mar 19 15:05:39 2024 OS/Arch: linux/amd64 Experimental: false containerd: Version: v1.7.13 GitCommit: 7c3aca7a610df76212171d200ca3811ff6096eb8 runc: Version: 1.1.12 GitCommit: v1.1.12-0-g51d5e94 docker-init: Version: 0.19.0 GitCommit: de40ad0 # docker compose version Docker Compose version v2.29.1 #
解决方案
问题核心是**docker stack系列命令遵循Swarm原生栈配置规范,不支持Compose v2新增的content字段**——哪怕你的Compose版本达标也没用,因为docker stack是Docker客户端直接对接Swarm API的命令,并非由Compose CLI处理。
你有两种可行的解决方式:
方式1:改用docker compose deploy部署到Swarm
保留原Compose文件,执行以下命令(确保Swarm已初始化):
docker compose deploy -c cfg.yaml p1
docker compose deploy是Compose CLI提供的Swarm部署命令,完全支持Compose spec中新增的content字段。
方式2:预先创建Swarm Config,再在栈文件中引用
- 先通过命令行创建目标config:
echo "This is my content" | docker config create cfg -
- 修改Compose文件,将config声明为外部资源:
configs: cfg: external: true
- 再执行
docker stack deploy完成部署:
docker stack deploy -c cfg.yaml p1
补充说明:你观察到错误来自客户端,是因为docker stack config在本地解析栈文件时,会严格按照Swarm规范校验字段,发现content不被允许后直接报错,不会发起服务端请求。
内容的提问来源于stack exchange,提问作者rsmoorthy
相关产品推荐
相关产品推荐

