Repository navigation
Description
Description
We used docker-ce 26.0.0 before (former debian 11 default package), and after the upgrade to 26.0.1 (current debian 11 stable package as of last night) our stack deployments fail with something like "services.agent.deploy.resources.limits.cpus must be a string"
We usually do something like docker compose config | .. | docker stack deploy, this worked with docker 26.0.0 and docker compose 2.25.0 but does not work with docker 26.0.1 and docker compose 2.26.1 anymore.
My initial thought was that it was related to docker compose, so I opened this issue: docker/compose#11721
As it seems not to be related with compose, I was pointed to this repository.
I checked the compose spec and it still seems to allow "number", "string": https://github.com/compose-spec/compose-spec/blob/master/schema/compose-spec.json#L519
Reproduce
config:
version: '3.8'
services:
agent:
deploy:
mode: global
resources:
limits:
cpus: 0.5
memory: "268435456"
reservations:
cpus: 0.1
memory: "67108864"
placement:
constraints:
- node.platform.os == linux
image: portainer/agent:2.20.1
networks:
master_agent_network: null
volumes:
- type: bind
source: /var/run/docker.sock
target: /var/run/docker.sock
bind:
create_host_path: true
- type: bind
source: /var/lib/docker/volumes
target: /var/lib/docker/volumes
bind:
create_host_path: true
Trying to deploy this via docker stack deploy will result in "services.agent.deploy.resources.limits.cpus must be a string" and the deployment will fail.
Expected behavior
Using docker stack deploy with the config above should work
docker version
Client: Docker Engine - Community
Version: 26.0.1
API version: 1.45
Go version: go1.21.9
Git commit: d260a54
Built: Thu Apr 11 10:53:52 2024
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 26.0.1
API version: 1.45 (minimum version 1.24)
Go version: go1.21.9
Git commit: 60b9add
Built: Thu Apr 11 10:53:52 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.31
GitCommit: e377cd56a71523140ca6ae87e30244719194a521
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.19.0
GitCommit: de40ad0docker info
Client: Docker Engine - Community
Version: 26.0.1
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.13.1
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.26.1
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 18
Running: 17
Paused: 0
Stopped: 1
Images: 37
Server Version: 26.0.1
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: active
NodeID: XXX
Is Manager: true
ClusterID: XXX
Managers: 3
Nodes: 5
Default Address Pool: 10.0.0.0/8
SubnetSize: 24
Data Path Port: 4789
Orchestration:
Task History Retention Limit: 5
Raft:
Snapshot Interval: 10000
Number of Old Snapshots to Retain: 0
Heartbeat Tick: 1
Election Tick: 10
Dispatcher:
Heartbeat Period: 5 seconds
CA Configuration:
Expiry Duration: 3 months
Force Rotate: 0
Autolock Managers: false
Root Rotation In Progress: false
Node Address: xxx
Manager Addresses:
xxx:2377
yyy:2377
zzz:2377
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: e377cd56a71523140ca6ae87e30244719194a521
runc version: v1.1.12-0-g51d5e94
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: builtin
cgroupns
Kernel Version: 5.10.0-28-amd64
Operating System: Debian GNU/Linux 11 (bullseye)
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 15.62GiB
Name: XXX
ID: XXX
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: falseAdditional Info
No response
Activity
LorisBalsamo commentedon May 2, 2024
Same problem!
Hackbard commentedon May 8, 2024
Also here the problem 😪
lofotyr commentedon May 8, 2024
push - same issue here
ktnr commentedon May 8, 2024
Same here
thaJeztah commentedon May 21, 2024
This looks to be some incompatibility in
compose configand the compose spec not being backward compatible with the v3 schema; it looks like this commit introduced numeric values into the compose spec, but for some reason compose config also uses that as a default, which makes the converted file incompatible with the v3 schema; compose-spec/compose-spec@2808cefcli/cli/compose/schema/data/config_schema_v3.12.json
Lines 389 to 400 in 49c0e19
There's a pending PR to switch
docker stackto use the compose-schema, but we need to look at incompatibilities like this, as these would break backward compatibility with existing systems;dpaes commentedon Jul 26, 2024
up
tkikuchi2000 commentedon Sep 9, 2024
Same here.
It works well via sed.
hugomau commentedon Jan 8, 2026
Hello! I have the same issue.
Any news on this?
Is there another workaround besides using 'sed'?
thanks
locker95 commentedon Aug 23, 2026
opened a pr that lets the v3 schema take a number for cpus, so
compose config | stack deploydoesn't choke on it: #7230