compose icon indicating copy to clipboard operation
compose copied to clipboard

[BUG] [Regression] Can't pipe compose output with color

Open shanesmith opened this issue 1 month ago • 2 comments

Description

Previously we were able to force compose to colour its output with --ansi=always when piping but this now now fails with failed to get console: provided file is not a console.

It seems this behaviour was fixed in v2.39.0 with https://github.com/docker/compose/issues/13072, but was broken again in v2.39.3 possibly with https://github.com/docker/compose/pull/13181.

Steps To Reproduce

$ docker compose --ansi=always build | cat
failed to get console: provided file is not a console
$ docker compose --ansi=always --progress=plain build | cat
can't use --progress plain while ANSI support is forced

Compose Version

$ docker compose version
Docker Compose version v2.40.3-desktop.1

Docker Environment

Client:
 Version:    28.5.1
 Context:    desktop-linux
 Debug Mode: false
 Plugins:
  ai: Docker AI Agent - Ask Gordon (Docker Inc.)
    Version:  v1.9.11
    Path:     /Users/shane/.docker/cli-plugins/docker-ai
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.29.1-desktop.1
    Path:     /Users/shane/.docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.40.3-desktop.1
    Path:     /Users/shane/.docker/cli-plugins/docker-compose
  debug: Get a shell into any image or container (Docker Inc.)
    Version:  0.0.45
    Path:     /Users/shane/.docker/cli-plugins/docker-debug
  desktop: Docker Desktop commands (Docker Inc.)
    Version:  v0.2.0
    Path:     /Users/shane/.docker/cli-plugins/docker-desktop
  extension: Manages Docker extensions (Docker Inc.)
    Version:  v0.2.31
    Path:     /Users/shane/.docker/cli-plugins/docker-extension
  init: Creates Docker-related starter files for your project (Docker Inc.)
    Version:  v1.4.0
    Path:     /Users/shane/.docker/cli-plugins/docker-init
  mcp: Docker MCP Plugin (Docker Inc.)
    Version:  v0.24.0
    Path:     /Users/shane/.docker/cli-plugins/docker-mcp
  model: Docker Model Runner (Docker Inc.)
    Version:  v0.1.46
    Path:     /Users/shane/.docker/cli-plugins/docker-model
  offload: Docker Offload (Docker Inc.)
    Version:  v0.5.1
    Path:     /Users/shane/.docker/cli-plugins/docker-offload
  sandbox: Docker Sandbox (Docker Inc.)
    Version:  v0.3.1
    Path:     /Users/shane/.docker/cli-plugins/docker-sandbox
  sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc.)
    Version:  0.6.0
    Path:     /Users/shane/.docker/cli-plugins/docker-sbom
  scout: Docker Scout (Docker Inc.)
    Version:  v1.18.3
    Path:     /Users/shane/.docker/cli-plugins/docker-scout
WARNING: Plugin "/Users/shane/.docker/cli-plugins/docker-compose.bak" is not valid: plugin candidate "compose.bak" did not match "^[a-z][a-z0-9]*$"

Server:
 Containers: 23
  Running: 6
  Paused: 0
  Stopped: 17
 Images: 141
 Server Version: 28.5.1
 Storage Driver: overlayfs
  driver-type: io.containerd.snapshotter.v1
 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
 CDI spec directories:
  /etc/cdi
  /var/run/cdi
 Discovered Devices:
  cdi: docker.com/gpu=webgpu
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 05044ec0a9a75232cad458027ca83437aae3f4da
 runc version: v1.2.5-0-g59923ef
 init version: de40ad0
 Security Options:
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 6.10.14-linuxkit
 Operating System: Docker Desktop
 OSType: linux
 Architecture: aarch64
 CPUs: 12
 Total Memory: 7.653GiB
 Name: docker-desktop
 ID: 6af4d86f-1316-4435-abe6-19d769b81b82
 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
 Labels:
  com.docker.desktop.address=unix:///Users/shane/Library/Containers/com.docker.docker/Data/docker-cli.sock
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5555
  ::1/128
  127.0.0.0/8
 Live Restore Enabled: false

Anything else?

It seems to me that docker compose --ansi=always --progress=plain build is what we want in the end, if i understand correctly this is essentially what https://github.com/docker/compose/pull/13074 does, but running the command results in can't use --progress plain while ANSI support is forced and I'm not sure why that would be blocked?

shanesmith avatar Nov 06 '25 14:11 shanesmith

build command relies on Bake since v2.40, which requires an actual console to render build UI with colored/animated output. Maybe we should detect this requirement mismatch and let Bake run with plain text mode, with a warning.

but running the command results in can't use --progress plain while ANSI support is forced and I'm not sure why that would be blocked?

ansi is a legacy flag which actually controls the value set to --progress, used both for build and other compose operations

ndeloof avatar Nov 07 '25 06:11 ndeloof

Come to think of it, what I'm actually interested in is the up command and the colourization of the service prefixes in the output like service-1 | foo.

The issue therefore happens when up requires a build step, in that case I'd like the build step to be plain and the up step to be colorized.

shanesmith avatar Nov 07 '25 14:11 shanesmith

@shanesmith you can set BUILDKIT_DISPLAY=plain (after https://github.com/docker/compose/pull/13455 has been released) to get Compose UI being colored, but build rendered as plain text

ndeloof avatar Dec 17 '25 09:12 ndeloof