Skip to content

[BUG] Watch: docker compose watch does not show service output / container logs #11089

Closed

Description

@Axxxx0n

Description

docker compose watch does not show service output (logs), only syncing info. Running docker compose up with same docker-compose.yml config shows service outputs normally.

Steps To Reproduce

  1. run docker compose watch
  2. see that there are no service output logs

Compose Version

Docker Compose version v2.22.0-desktop.2

Docker Environment

Client:
 Version:    24.0.6
 Context:    desktop-linux
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.11.2-desktop.5
    Path:     /Users/ax/.docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.22.0-desktop.2
    Path:     /Users/ax/.docker/cli-plugins/docker-compose
  dev: Docker Dev Environments (Docker Inc.)
    Version:  v0.1.0
    Path:     /Users/ax/.docker/cli-plugins/docker-dev
  extension: Manages Docker extensions (Docker Inc.)
    Version:  v0.2.20
    Path:     /Users/ax/.docker/cli-plugins/docker-extension
  init: Creates Docker-related starter files for your project (Docker Inc.)
    Version:  v0.1.0-beta.8
    Path:     /Users/ax/.docker/cli-plugins/docker-init
  sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc.)
    Version:  0.6.0
    Path:     /Users/ax/.docker/cli-plugins/docker-sbom
  scan: Docker Scan (Docker Inc.)
    Version:  v0.26.0
    Path:     /Users/ax/.docker/cli-plugins/docker-scan
  scout: Docker Scout (Docker Inc.)
    Version:  v1.0.7
    Path:     /Users/ax/.docker/cli-plugins/docker-scout

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 19
 Server Version: 24.0.6
 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 logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 8165feabfdfe38c65b599c4993d227328c231fca
 runc version: v1.1.8-0-g82f18fe
 init version: de40ad0
 Security Options:
  seccomp
   Profile: unconfined
  cgroupns
 Kernel Version: 6.4.16-linuxkit
 Operating System: Docker Desktop
 OSType: linux
 Architecture: aarch64
 CPUs: 8
 Total Memory: 7.667GiB
 Name: docker-desktop
 ID: 4de9b5ab-74fd-479f-931e-3d876395eb3e
 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
 Experimental: false
 Insecure Registries:
  hubproxy.docker.internal:5555
  127.0.0.0/8
 Live Restore Enabled: false

Anything else?

version: "3"

services:
  app:
    image: ${PROJECT_NAME}
    build:
      context: .
      target: development
      args:
        - NODE_ENV=development
    ports:
      - 3000:3000
    restart: "no"
    develop:
      watch:
        - action: sync
          path: .
          target: /app
          ignore:
            - node_modules/
        - action: rebuild
          path: package.json

Activity

  1. changed the title [-][BUG] Watch: docker compose watch does not show service output[/-] [+][BUG] Watch: docker compose watch does not show service output / container logs[/+] on Oct 12, 2023
  2. ndeloof commented on Oct 12, 2023

    @ndeloof
    Contributor

    indeed, docker compose watch is used to track changes and trigger refresh actions, but is not a replacement for docker compose up (attached to service) or docker compose logs. This is by design, as watch will show status messages, and show build logs, which would be hidden by logs.

  3. mbrevda commented on Oct 23, 2023

    @mbrevda

    This is by design

    If possible, it would be great if some official guidance on how to use watch & up together would be made available. Is this recommended (in a script)?

    docker compose $COMPOSE_FILE watch --no-up &
    docker compose $COMPOSE_FILE up
    
  4. Axxxx0n commented on Oct 23, 2023

    @Axxxx0n
    Author

    I wonder the same thing. Was confused because watch also up-s services.

  5. g0t4 commented on Nov 2, 2023

    @g0t4
    Contributor

    I use two panes:

    • docker compose up # view my app's logs
    • docker compose watch # sync and rebuild

    And, if I want to interact with the service (STDIN/OUT):

    • first use docker compose watch (runs docker compose up -d for me)
    • then docker container attach foo-service (can send signals, i.e. Ctrl+R to reload when hot reload is insufficient)

    I like having two separate interfaces to each program (one is my app, one is watch actions)... it caught me off guard initially that watch doesn't show the output of services so I suppose there could be a justification to merge watch output with services like docker compose up normally does with multiple services.

  6. ChristophP commented on Nov 28, 2023

    @ChristophP

    I was first excited about watch and immediately tried it out as it seemed to simplify things.
    However, the situation is the logs is surprising as I also hoped it would be a replacement for compose up, especially since watch seems to be a development feature and I don't see there being a strong case where on might want hot reloading for local development but not logs.

    It does simplify the setup due to not having to use volumes and not having to restart manually when certain things change but it does add the complexity of not having a "one-for-all" development command and having to explain to team members why they would now have to run 2 commands in 2 terminal sessions instead of 1.

    I'm considering staying with the previous volume + compose up solution for now because of the missing logs. Would love to come back to watch at some point.

    Maybe one solution could be if the develop and watch block were also respected when running docker compose up with container logs and when running docker compose watch they would show build logs.

  7. ndeloof commented on Nov 28, 2023

    @ndeloof
    Contributor

    @ChristophP did you considered having 2 terminals ? One to show you logs, the other to run watch ?

  8. ChristophP commented on Nov 28, 2023

    @ChristophP

    Yes, I did. But for developer experience it was easier to have everything in one command as it was before with the volume + compose up combination.
    I think if docker wants to provide a similar dev experience as other hot reloading tooling (vite, webpack, nodemon etc) it might make sense go into that direction of providing the logs in the same command. As this is what developers are used to from most other tools.

  9. m3talstorm commented on Dec 6, 2023

    @m3talstorm

    Was also surprised by this

  10. g0t4 commented on Dec 6, 2023

    @g0t4
    Contributor

    Was surprising too, in my experience hot reload tools tend to merge start/watch into a single command, i.e. dotnet watch instead of dotnet run

    I was expecting docker compose watch to replace docker compose up as well as my work on docker compose attach (attach logs + STDIN)! All I wanted was a replacement for up that does even more for me! 😆

  11. skessler-incucai commented on Jan 4, 2024

    @skessler-incucai

    I was also expecting docker compose watch to be a replacement for docker compose up in development mode...

    bummer...

  12. lenmazzone commented on Jan 8, 2024

    @lenmazzone

    This is by design

    If possible, it would be great if some official guidance on how to use watch & up together would be made available. Is this recommended (in a script)?

    docker compose $COMPOSE_FILE watch --no-up &
    docker compose $COMPOSE_FILE up
    

    I went for the following in a Makefile:

    run:
        make -j 2 watch compose
    
    watch:
        docker compose watch --no-up
    
    compose:
        docker compose up
    
  13. skessler-incucai commented on Jan 8, 2024

    @skessler-incucai

    would be a good idea to add:

    docker compose watch --logs ?

  14. DerGary commented on Feb 13, 2024

    @DerGary

    would also like to have logs in the terminal vom watch. But --logs would also be sufficient. Look at how skaffold does it.

  15. diraneyya commented on Apr 14, 2024

    @diraneyya

    It seems that watch replaces up so I would like to clarify that the comment on using watch along with up is both confusing and misleading.

    The answer is simple and has not been mentioned once in the above, all one needs to do is simply to complement the running docker compose watch command with a docker compose logs --follow command in another terminal tab from the same directory/compose file (where --follow will continue to run indefinitely and follow the log output, just as you would expect from the up command).

    Yes it would be indeed nice if we do not need to have two terminals or two terminal tabs running but I think we owe the future readers of this thread to at least mention the basic answer to the question.

    PS: it seems that there has been a merge incorporating a --watch CLI option to the up command, however, on my system (M2 MacBook Pro Docker Compose version v2.24.6) this option/flag is not yet available. So until this is rolled out I think the answer above is sufficient and clear.

  16. lorenzogrv commented on Apr 26, 2024

    @lorenzogrv

    Thanks @diraneyya for pointing me on the right direction.

    docker compose up --watch is available on my system with Docker Compose version v2.26.1.

    It does the job seamless, we can even instruct it to docker compose up --build --watch

    PS: maybe https://docs.docker.com/compose/file-watch/ should note this for future reference

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions