Hello all!

Can you mount any folder a docker image is running in?

So for example, if I have a python script creating a file “./hello.txt”, it would be written in the folder where I launch “docker-compose up” ?

I have figured out how to write the hello.txt to a subfolder like /data/ (by mapping an image-local folder to /data/), but I’d like to use like ./ for the image itself instead. So that the folder I’m launching the docker-compose in on my PC is mapped to ./ in the image, if that makes more sense.

So this works (in the compose.yml):

volumes:

  - ./:/data

but the script must write to “./data/hello.txt”

This doesn’t work:

volumes:

  - ./:./

It pops an error: mount path must be absolute

Any idea if this is even possible?

Cheers and thanks !

  • SolidGrue
    link
    fedilink
    English
    2
    edit-2
    3 months ago

    You’ve pretty much answered it yourself in the example you gave: you can mount the host’s relative path ./ to an absolute path /data in the compose file, and the container will mount the $CWD at launch as /data.

    I think most bind mounts are default read-only, which is why your write is failing. Try adding ,rw to the end of the list entry in volumes and see if that helps.

    edit: another poster got it with working_dir which also is more right

    Using relative paths is bad practice, by the way. It’s fine for development and testing, but in production you would want always to use absolute paths. Think of it as a bad habit that leaves surprises for yourself and othere down the road when moving or replicating projects. If you want it to be more dynamic, consider using compose vars and environment variables

    Another thing you might want to consider is not mounting the project root as a RW filesystem in your containers, since this allows the container to modify its own compose file. That’s rarely something you’d want to do. Better to make a subdirectory for each container in the project folder, and mount those into the appropriate contains