docker / compose

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

[BUG] watch does not support include/exclude per docs. #11098

Open tommysullivan opened 1 year ago

tommysullivan commented 1 year ago

Description

The default is to ignore .git directory. I am used to VS Code devcontainers which mount in the volume and thus contain .git and thus i can work completely in my container including issuing git cli commands as well as using vs code plugins that rely on git.

Docs should either not say include/exclude or the feature should be implemented; i just converted everything over to not use dev volume mounts and after all that work i can't use it.

Excited to be able to use it though some day, will greatly simplify all the stuff we do to develop in containers

Steps To Reproduce

  1. add an include/exclude stanza to service yaml
  2. confirm it does not work by looking at the in-container file system

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/thomassullivan/.docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.22.0-desktop.2
    Path:     /Users/thomassullivan/.docker/cli-plugins/docker-compose
  dev: Docker Dev Environments (Docker Inc.)
    Version:  v0.1.0
    Path:     /Users/thomassullivan/.docker/cli-plugins/docker-dev
  extension: Manages Docker extensions (Docker Inc.)
    Version:  v0.2.20
    Path:     /Users/thomassullivan/.docker/cli-plugins/docker-extension
  init: Creates Docker-related starter files for your project (Docker Inc.)
    Version:  v0.1.0-beta.8
    Path:     /Users/thomassullivan/.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/thomassullivan/.docker/cli-plugins/docker-sbom
  scan: Docker Scan (Docker Inc.)
    Version:  v0.26.0
    Path:     /Users/thomassullivan/.docker/cli-plugins/docker-scan
  scout: Docker Scout (Docker Inc.)
    Version:  v1.0.7
    Path:     /Users/thomassullivan/.docker/cli-plugins/docker-scout

Server:
 Containers: 5
  Running: 5
  Paused: 0
  Stopped: 0
 Images: 26
 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: x86_64
 CPUs: 8
 Total Memory: 15.63GiB
 Name: docker-desktop
 ID: 35181d5a-71df-4d45-963a-d0401d2248c3
 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

WARNING: daemon is not using the default seccomp profile

Anything else?

No response

ndeloof commented 1 year ago

watch does not support include/excludes but offers ignores .git (and a few others) is intentionally excluded as any fiel change on your local working copy would then result in unnecessary file sync with container. watch is not an alternative implementation of dev containers, it assumes developer still work local, and just want a faster inner loop with application running latest codebase.

tommysullivan commented 1 year ago

hey. two things

  1. the docs are misleading because they refer to a non existing capability
  2. the request is to be able to sync the .git folder, which there are plenty of reasons to sometimes do. for example, both gitpod and github codespaces will run your docker compose services, then hook up the browser-based part of VS Code's visuals to the remote, in-container plugins and in-container compilers/tools, including git, which of course depend on the presence of the .git folder within the container. syncing that should be no problem.

basically, I do have a fast inner dev loop, which exists in the container, and i could use the new native developer stanza's sync capability to make that same inner dev loop work with less volume mounting / ugly dockerfile stuff if you allowed a user to sync whatever they wish, including .git. there is also no risk, if a developer explicitly adds it and does a bunch of heavy git operations, thats on them.

vscode folks will def have a look at how their devcontainers could leverage docker-compose watch just as they already leverage docker-compose up with volume mounts for supporting in-container fast inner dev loop. but their tech relies heavily on ability to have the .git folder appear in the container fs whether mounted or synced; so without this change they won't be able to do that.

im sure eventually, more people / they would ask for this. cheers

ndeloof commented 1 year ago

the docs are misleading because they refer to a non existing capability

Can you please be more explicit on which capability the docs refer to?

PAXANDDOS commented 10 months ago

I'm also confused about this.

watch does not support include/excludes

This is misleading. I've just seen the docs where it says to use include/exclude to override files. Still, I couldn't find any info on how to use these directives. image

but offers ignores

And now this looks different from the docs. Docs don't have anything about ignore but your link has, how convenient. I hope that it at least works with ! symbol to include certain files and directories.

UPDATE: it doesn't. How are we supposed to include back files that were excluded by dockerignore? The issue is, I have certain files and directories excluded in .dockerignore and it's essentially build for production. With watch I want to add these files and folders back since they're needed for development and testing, which is not possible with the ignore you mentioned.

dawidstezycki commented 9 months ago

Why was this closed? I have this issue with .env file that I want to trigger sync+restart when changed. The docs linked were not updated and I just spent some time trying to fix tar issue (which is not included in alpine images, so I think this prerequisite should be highlighted more), then something that should have been properly validated only to find out that the official docs describe functionality that is not planned. I don't think it should have been closed before the documentation is updated.

ndeloof commented 9 months ago

fix tar issue (which is not included in alpine images, so I think this prerequisite should be highlighted more)

This is not the case anymore with latest release

dawidstezycki commented 9 months ago

Thanks for the doc update! Do you maintain that any way of overriding .dockerignore is not planned? I don't want to have my .env file in the image but I'd like to have it in my local dev container and have it trigger the watcher. I think this is a very common use case and I'm afraid not supporting it promotes keeping secrets in the image which is not the best security practice.

ndeloof commented 9 months ago

I re-opened this issue as we should support ! symbol (or any other way) so you can declare "include" rules to watch files ignored by .dockerignore, to cover such a scenario

github-actions[bot] commented 4 months ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

tommysullivan commented 4 months ago

ping, this would still be useful for all online docker ides! please

stale[bot] commented 4 months ago

This issue has been automatically marked as not stale anymore due to the recent activity.