How to mount Docker container volumes to different path?

Container #1 runs with a volume defined for /data, and I’d like to use the run option --volumes-from to mount this volume to another container, but I’d like to change the path for the second container.

In other words /data from container #1 should be mounted to /custom/data inside container #2.

  • Docker link container as build argument
  • How can I get a Docker image's label if the label name has a “.” in it?
  • Docker: Mongo exits on run
  • Create Docker for Wso2 DAS
  • Docker - Call to undefined function mcrypt_get_block_size()
  • mysql with Exited(1) from docker
  • Is that possible? Is there a solution for this?

    Thanks!

  • How does the container use more memory than the limit?
  • Bcrypt: invalid ELF header with Docker and Sails.JS
  • Docker containers, memory consumption and logs
  • installing transmission on debian with docker, right trouble
  • lxc-attach failed to enter the namespace - EC2 Instances
  • Why use Consul with Kubernetes, Docker, Mesos?
  • One Solution collect form web for “How to mount Docker container volumes to different path?”

    It is currently not possible to add custom options to --volumes-from.

    There are two possible solutions. However, neither is perfect…

    Solution 1

    Personally, I do not like this as it only works in Linux. It will not work with Boot2Docker. How to map volume paths using Docker's –volumes-from?

    Solution 2

    The second solution is to use a sym-link. This works pretty great but there is a caveat at the end.

    Run a docker container with an interactive shell and the volumes from container #1; busybox is ideal for this:

    docker run --rm -it --volumes-from container-1-name busybox
    

    where container-1-name is the name of container#1.

    Within the shell that opens, you can create a symbolic link that points from /custom/data to /data. Assuming that the root to /custom already exists (use mkdir first if not), type:

    ln -s /data /custom/data
    

    Now you can check this link exists. You should see something like this:

    / # ls -l custom/
    total 0
    lrwxrwxrwx    1 root     root             5 Mar  4 08:09 data -> /data
    

    Then you are done with this container. Exit. Now, if you create a new container than uses --volumes-from container-1-name, it can access the contents of /data via /custom/data.

    Caveat: You should note that containers using --volumes-from container-1-name will have both /data and /custom/data. There is no way around that using this solution. In most situations, I imagine this is fine. However, if this no good for you, you will need to find another solution.

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.