'Make docker-compose ignore folder within volume
I'm using docker-compose for a Rails setup. To sync the files, I've mounted the directory like (some of the code is omitted):
app:
build: .
command: rails server -p 3000 -b '0.0.0.0'
volumes:
- .:/app
However, when running the app, I don't want the folder, tmp, to be synced. Adding the folder to dockerignore only solves the problem when building the docker image. How can I ignore the tmp folder from being synced between the host and guest when running docker compose?
Solution 1:[1]
This used to be possible as described in Add a volume to Docker, but exclude a sub-folder. The solutions offered there didn't work for me anymore with docker-compose 1.25.0-rc3, file syntax v3.
Solution 2:[2]
You can use a data volume to store tmp
, as data volumes copy in the data from the built docker image before the app directory is mounted
volumes:
- .:/app
- /path/to/tmp
Solution 3:[3]
You can add a second volume to a sub-path. It will override the contents of the existing volume. Like so :
app:
build: .
command: rails server -p 3000 -b '0.0.0.0'
volumes:
- .:/app
- ./empty-tmp:/app/tmp
This will effectively make /app/tmp
show the contents of ./empty-tmp
on the host system. Instead of showing the contents of ./tmp
Solution 4:[4]
What I ended up doing was to simply map all the folders which I wanted to sync:
- ./app:/app/app
- ./lib:/app/lib
- ./log:/app/log
- ./spec:/app/spec
Which seems to solve the problem
Solution 5:[5]
The right way to exclude folder from container but still be able to login into container and inspect files (I'm talking about development environment):
volumes:
- ./app-backend:/srv/www/app
- type: tmpfs
target: /srv/www/app/var/
So my ./var folder is excluded from syncing but when I log into the container - cache and log files are there.
Reference: https://docs.docker.com/storage/tmpfs/, a quote:
a tmpfs mount is temporary, and only persisted in the host memory. When the container stops, the tmpfs mount is removed, and files written there won’t be persisted.
This works for:
- Docker version 20.10.13
- Docker Compose version v2.3.3
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | thisismydesign |
Solution 2 | Siyu |
Solution 3 | Markus Stefanko |
Solution 4 | Anders |
Solution 5 | Anton |