[BUG] docker-compose ps --format json
Description
When I run the "docker compose ps --format json" command, I get an incorrect json output - I have to write third-party parsers to use it, it's inconvenient. Specifically, there is no common array, and there are no commas after each element.
test-docker-json-ps docker compose ps --format json
{"Command":"\"docker-entrypoint.s…\"","CreatedAt":"2024-05-02 12:21:53 +0400 +04","ExitCode":0,"Health":"","ID":"d2763e024a10","Image":"redis:latest","Labels":"com.docker.compose.container-number=1,com.docker.compose.depends_on=,com.docker.compose.version=2.26.1,com.docker.compose.project.working_dir=/Users/user/PhpProjects/tests/test-docker-json-ps,com.docker.compose.service=db,com.docker.compose.config-hash=1d46387138917e3b72ec38f9e06d9a31620ae8632d165d557e9de1dfe8ac0e37,com.docker.compose.image=sha256:dc1103822fa306062ff7528afee092c01d475c98e6042b6790d499c1271426cc,com.docker.compose.oneoff=False,com.docker.compose.project=test-docker-json-ps,com.docker.compose.project.config_files=/Users/user/PhpProjects/tests/test-docker-json-ps/docker-compose.yml","LocalVolumes":"1","Mounts":"ae6fbf221bbbee…","Name":"test-docker-json-ps-db-1","Names":"test-docker-json-ps-db-1","Networks":"test-docker-json-ps_default","Ports":"6379/tcp","Project":"test-docker-json-ps","Publishers":[{"URL":"","TargetPort":6379,"PublishedPort":0,"Protocol":"tcp"}],"RunningFor":"12 seconds ago","Service":"db","Size":"0B","State":"running","Status":"Up 11 seconds"}
{"Command":"\"/docker-entrypoint.…\"","CreatedAt":"2024-05-02 12:21:53 +0400 +04","ExitCode":0,"Health":"","ID":"83ea0d77a30a","Image":"nginx:latest","Labels":"com.docker.compose.container-number=1,com.docker.compose.image=sha256:786a14303c96017fa81cc9756e01811a67bfabba40e5624f453ff2981e501db0,com.docker.compose.project=test-docker-json-ps,com.docker.compose.project.config_files=/Users/user/PhpProjects/tests/test-docker-json-ps/docker-compose.yml,com.docker.compose.version=2.26.1,maintainer=NGINX Docker Maintainers \[email protected]\u003e,com.docker.compose.config-hash=d1485a37cd4c574c92e2849f6412ef406082df7fddab1b8f3e8b7385dc4d3d8f,com.docker.compose.depends_on=,com.docker.compose.oneoff=False,com.docker.compose.project.working_dir=/Users/user/PhpProjects/tests/test-docker-json-ps,com.docker.compose.service=web","LocalVolumes":"0","Mounts":"","Name":"test-docker-json-ps-web-1","Names":"test-docker-json-ps-web-1","Networks":"test-docker-json-ps_default","Ports":"80/tcp","Project":"test-docker-json-ps","Publishers":[{"URL":"","TargetPort":80,"PublishedPort":0,"Protocol":"tcp"}],"RunningFor":"12 seconds ago","Service":"web","Size":"0B","State":"running","Status":"Up 11 seconds"}
I think output should be:
[
{"Command":"\"docker-entrypoint.s…\"","CreatedAt":"2024-05-02 12:21:53 +0400 +04","ExitCode":0,"Health":"","ID":"d2763e024a10","Image":"redis:latest","Labels":"com.docker.compose.container-number=1,com.docker.compose.depends_on=,com.docker.compose.version=2.26.1,com.docker.compose.project.working_dir=/Users/user/PhpProjects/tests/test-docker-json-ps,com.docker.compose.service=db,com.docker.compose.config-hash=1d46387138917e3b72ec38f9e06d9a31620ae8632d165d557e9de1dfe8ac0e37,com.docker.compose.image=sha256:dc1103822fa306062ff7528afee092c01d475c98e6042b6790d499c1271426cc,com.docker.compose.oneoff=False,com.docker.compose.project=test-docker-json-ps,com.docker.compose.project.config_files=/Users/user/PhpProjects/tests/test-docker-json-ps/docker-compose.yml","LocalVolumes":"1","Mounts":"ae6fbf221bbbee…","Name":"test-docker-json-ps-db-1","Names":"test-docker-json-ps-db-1","Networks":"test-docker-json-ps_default","Ports":"6379/tcp","Project":"test-docker-json-ps","Publishers":[{"URL":"","TargetPort":6379,"PublishedPort":0,"Protocol":"tcp"}],"RunningFor":"12 seconds ago","Service":"db","Size":"0B","State":"running","Status":"Up 11 seconds"},
{"Command":"\"/docker-entrypoint.…\"","CreatedAt":"2024-05-02 12:21:53 +0400 +04","ExitCode":0,"Health":"","ID":"83ea0d77a30a","Image":"nginx:latest","Labels":"com.docker.compose.container-number=1,com.docker.compose.image=sha256:786a14303c96017fa81cc9756e01811a67bfabba40e5624f453ff2981e501db0,com.docker.compose.project=test-docker-json-ps,com.docker.compose.project.config_files=/Users/user/PhpProjects/tests/test-docker-json-ps/docker-compose.yml,com.docker.compose.version=2.26.1,maintainer=NGINX Docker Maintainers \[email protected]\u003e,com.docker.compose.config-hash=d1485a37cd4c574c92e2849f6412ef406082df7fddab1b8f3e8b7385dc4d3d8f,com.docker.compose.depends_on=,com.docker.compose.oneoff=False,com.docker.compose.project.working_dir=/Users/user/PhpProjects/tests/test-docker-json-ps,com.docker.compose.service=web","LocalVolumes":"0","Mounts":"","Name":"test-docker-json-ps-web-1","Names":"test-docker-json-ps-web-1","Networks":"test-docker-json-ps_default","Ports":"80/tcp","Project":"test-docker-json-ps","Publishers":[{"URL":"","TargetPort":80,"PublishedPort":0,"Protocol":"tcp"}],"RunningFor":"12 seconds ago","Service":"web","Size":"0B","State":"running","Status":"Up 11 seconds"}
]
Steps To Reproduce
- docker-compose ps --format json
Compose Version
Docker Compose version v2.26.1-desktop.1
Docker Environment
Client:
Context: desktop-linux
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc., v0.13.1-desktop.1)
compose: Docker Compose (Docker Inc., v2.26.1-desktop.1)
debug: Get a shell into any image or container. (Docker Inc., 0.0.27)
dev: Docker Dev Environments (Docker Inc., v0.1.2)
extension: Manages Docker extensions (Docker Inc., v0.2.23)
feedback: Provide feedback, right in your terminal! (Docker Inc., v1.0.4)
init: Creates Docker-related starter files for your project (Docker Inc., v1.1.0)
sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc., 0.6.0)
scout: Docker Scout (Docker Inc., v1.6.3)
WARNING: Plugin "/Users/user/.docker/cli-plugins/docker-scan" is not valid: failed to fetch metadata: fork/exec /Users/user/.docker/cli-plugins/docker-scan: no such file or directory
Server:
Containers: 49
Running: 37
Paused: 0
Stopped: 12
Images: 219
Server Version: 26.0.0
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: cgroupfs
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: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: ae07eda36dd25f8a1b98dfbf587313b99c0190bb
runc version: v1.1.12-0-g51d5e94
init version: de40ad0
Security Options:
seccomp
Profile: unconfined
cgroupns
Kernel Version: 6.6.22-linuxkit
Operating System: Docker Desktop
OSType: linux
Architecture: aarch64
CPUs: 10
Total Memory: 9.708GiB
Name: docker-desktop
ID: 150a90b0-9001-49c6-90ad-554e9c6cf7de
Docker Root Dir: /var/lib/docker
Debug Mode: false
HTTP Proxy: http.docker.internal:3128
HTTPS Proxy: http.docker.internal:3128
No Proxy: hubproxy.docker.internal
Registry: https://index.docker.io/v1/
Labels:
com.docker.desktop.address=unix:///Users/user/Library/Containers/com.docker.docker/Data/docker-cli.sock
Experimental: true
Insecure Registries:
hubproxy.docker.internal:5555
127.0.0.0/8
Live Restore Enabled: false
WARNING: You're not using the default seccomp profile
WARNING: daemon is not using the default seccomp profile
Anything else?
No response
@siamskoi We could process this on buffer level: each object denotes a separate line, so we could read a line from buffer, add commas and finally add square brackets. pr for the same: https://github.com/docker/cli/pull/5052
@ndeloof I think this is already fixed in docker compose v2.
--format json produces a newline delimited JSON stream, just like docker ps --format json does.
This is intentional. Most JSON parser (typically, jq command) will manage this format without pain.
I'm closing this issue as "not planned"