Can I mount a volume from a Dockerfile?

Is it possible to mount a volume from a Dockerfile? if not what is the best way to get this done?

I know you can do this using a normal Docker commands in the command prompt, but is there a better way to get this done?

  • Not enough entropy to support /dev/random in docker containers running in boot2docker
  • How to change container configuration without Dockerfile?
  • Docker - Does the container OS need to be same as Host OS
  • “Remove” a VOLUME in a Dockerfile
  • ParaView in Docker with OpenGL support
  • Kuberenets Web UI (Dashboard) missing graphs
  • Can dockerized containers truly run on any Linux node?
  • docker, where is the aufs root for the docker container
  • Docker image just contain software without OS
  • CI and CD implementation issues
  • Cross-device link not permitted Error in Meteor Project with Docker
  • 404 page on Docker when installing
  • 2 Solutions collect form web for “Can I mount a volume from a Dockerfile?”

    Unfortunately it is not possible to do so during an image build.

    I think the reason could be portability? I’m not quite sure here – will be nice if someone can explain this further.

    But my guess is that if Docker would to allow users to mount volumes on build then Docker will have to anticipate and handle different types of file systems, e.g Windows vs Unix. Also what if the directory path which it is supposed to be used for mounting does not exists on another host?

    Anyway, I’m not quite sure what your use case is but you should be able to use the ADD or COPY commands to move files from your host’s file system into the image during build and use the moved files for other purpose like installing etc.

    See:
    https://docs.docker.com/engine/reference/builder/#/add

    Q: So what is the best approach?
    A: I think there is no standard approach for mounting volume. I usually define my mounting in the docker-compose file.

    See:
    https://docs.docker.com/compose/compose-file/#/volumes-volume-driver

    Within the context of a Dockerfile, you have limited access to host resources, to the extent of what’s needed to actually build the container’s image. To illustrate, should you be able to mount host volumes, start containers or access their resources, that would probably equate to an image that can be built for you, in your current environment only.

    If you really need host resources mounted as a volume for the duration of the build only, you might want to look into Packr. However, if you want the volume to be available when the container starts, then usually it’s fine to somehow use docker run --name=Foo $ARGS.

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