Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
Axxxx0n opened this issue Oct 12, 2023 · 15 comments · Fixed by #11525
Closed

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

Axxxx0n opened this issue Oct 12, 2023 · 15 comments · Fixed by #11525

Comments

@Axxxx0n
Copy link

Axxxx0n commented Oct 12, 2023

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

@Axxxx0n Axxxx0n 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 Oct 12, 2023
@ndeloof
Copy link
Contributor

ndeloof commented Oct 12, 2023

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.

@ndeloof ndeloof closed this as not planned Won't fix, can't repro, duplicate, stale Oct 12, 2023
@mbrevda
Copy link

mbrevda commented Oct 23, 2023

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

@Axxxx0n
Copy link
Author

Axxxx0n commented Oct 23, 2023

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

@g0t4
Copy link
Contributor

g0t4 commented Nov 2, 2023

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.

@ChristophP
Copy link

ChristophP commented Nov 28, 2023

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.

@ndeloof
Copy link
Contributor

ndeloof commented Nov 28, 2023

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

@ChristophP
Copy link

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.

@m3talstorm
Copy link

Was also surprised by this

@g0t4
Copy link
Contributor

g0t4 commented Dec 6, 2023

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! 😆

@skessler-incucai
Copy link

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

bummer...

@lenmazzone
Copy link

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

@skessler-incucai
Copy link

would be a good idea to add:

docker compose watch --logs ?

@DerGary
Copy link

DerGary commented Feb 13, 2024

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

@diraneyya
Copy link

diraneyya commented Apr 14, 2024

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.

@lorenzogrv
Copy link

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
Projects
None yet
Development

Successfully merging a pull request may close this issue.