I just stumbled upon a
docker-compose behaviour that surprised my a little bit in the first moment. I’ll try to sketch it in short with a simplified example.
My host directory looks like this:
- backend/component1/src/config.py - backend/component2/src/linked_config.py -> ../../component1/src/config.py
linked_config.py is a symbolic link to the
config.py of the first component.
docker-compose.yml I mount the following volumes (in the global section):
volumes: - ./backend/component2:/usr/src/component2 - ./backend/component1/src/config.py:/usr/src/component2/linked_config.py
When I run the container,
component2 is available as
/usr/src/component2 as expected. The symbolic link still resides there, and the second volume (the
config.py file itself) is available as
/usr/component1/src/config.py (instead of /usr/src/component2/linked_config.py). So the symbolic link works and everything seems good.
However, I actually expected the link to be replaced (and thus, the
config.py being copied). But I also understand that following the link makes sense. Can you please tell me:
1. Is the described behaviour (following the link when mounting a volume) intentional (and maybe even documented)? 2. Is it safe to rely on this behaviour, or may it silently change with future releases?
I’m using docker-compose 1.24.1 with Docker 19.03.8 on Ubuntu Xenial (16.04).
Thank you in advance for your answers.