docker / compose

Define and run multi-container applications with Docker
https://docs.docker.com/compose/
Apache License 2.0
34.02k stars 5.23k forks source link

[BUG] TUI spams lines when container count is larger than terminal height #10256

Open ericslandry opened 1 year ago

ericslandry commented 1 year ago

Description

The output of docker compose up overwhelms my terminal when my compose.yaml's container count exceeds the terminal height.

Steps To Reproduce

services: svc_a: <<: default-service svc_b: <<: default-service depends_on: svc_a: condition: service_healthy svc_c: <<: default-service depends_on: svc_b: condition: service_healthy svc_d: <<: default-service depends_on: svc_c: condition: service_healthy svc_e: <<: default-service depends_on: svc_d: condition: service_healthy svc_f: <<: default-service depends_on: svc_e: condition: service_healthy svc_g: <<: default-service depends_on: svc_f: condition: service_healthy svc_h: <<: default-service depends_on: svc_g: condition: service_healthy svc_i: <<: default-service depends_on: svc_h: condition: service_healthy svc_j: <<: default-service depends_on: svc_i: condition: service_healthy svc_k: <<: default-service depends_on: svc_j: condition: service_healthy svc_l: <<: default-service depends_on: svc_k: condition: service_healthy

* Make terminal 11 lines high
* Run `docker compose up -d`
* Notice terminal scroll

### Compose Version

```Text
Docker Compose version v2.16.0

Docker Environment

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.10.2
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.16.0
    Path:     /usr/local/lib/docker/cli-plugins/docker-compose
  scan: Docker Scan (Docker Inc.)
    Version:  v0.23.0
    Path:     /usr/libexec/docker/cli-plugins/docker-scan

Server:
 Containers: 41
  Running: 38
  Paused: 0
  Stopped: 3
 Images: 40
 Server Version: 23.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: systemd
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 31aa4358a36870b21a992d3ad2bef29e1d693bec
 runc version: v1.1.4-0-g5fd4c4d
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 5.15.0-58-generic
 Operating System: Ubuntu 22.04.1 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 31.35GiB
 Name: <redacted>
 ID: <redacted>
 Docker Root Dir: /var/lib/docker
 Debug Mode: true
  File Descriptors: 420
  Goroutines: 457
  System Time: 2023-02-08T12:09:13.563395835-05:00
  EventsListeners: 2
 Registry: https://index.docker.io/v1/
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://<redacted/
 Live Restore Enabled: false

Anything else?

Issue created as requested by @ndeloof from over here https://github.com/docker/compose/issues/8800#issuecomment-1422640358

ndeloof commented 1 year ago

Issue is perfectly valid, but then the question is: what would be a reasonable behavior when terminal height is not large enough for the amount of services we want to show progress details ?

ericslandry commented 1 year ago

I don't know if that question was rhetorical, but I'll share my 2 cents. 😁

There are two solutions that I would find very acceptable.

Yinette commented 1 year ago

As a work-around I've found when I set the --parallel to 2 it is a lot less chaotic. However, it will take longer to build your project, so that might not be useful for most.

ajw107 commented 1 year ago

Would it also not be possible to change the 'sort' order for the containers when being pulled, so that the ones currently being pulled are on the bottom lines (and not off screen, as is the case currently with lots of services). So you can at least see what is happening? This won;t help you see how many more are left to be pulled, but is it a start.

thenick775 commented 1 year ago

+1

williamdes commented 1 year ago

I comment to let you know that using Android JuiceSSH And docker-compose 2.17.2 this scroll spam still occurs

henryxparker commented 1 year ago

Issue is perfectly valid, but then the question is: what would be a reasonable behavior when terminal height is not large enough for the amount of services we want to show progress details ?

is it impossible to allow scrolling? I'll admit I have no experience with how TUI works normally, but is it not possible to treat the output as you would any webpage and allow scrolling when the contents are too tall for the window?

ITJamie commented 1 year ago

I would love to see a plaintext version come back with inline text updates, only output text on complete changes.

ndeloof commented 1 week ago

@ITJamie docker compose --progress=plain up ... will show plain text state messages