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?

  • sbt-native-packager for Docker on Mac OS X
  • How to configure Let's encrypt certificates for nginx inside a docker image?
  • Docker container vs Java Virtual Machine
  • Connect to a docker mongo instance from remote server
  • nginx php-fpm crashes (maybe docker)
  • Links between containers not working with docker-compose version 2
  • How to use variable in Marathon Docker parameters
  • ELK docker access via localhost
  • Can we use Apache Kafka that is dockerized in production?
  • Host monitoring from a docker container
  • What is a simple workflow to use docker in Windows with a basic file sharing possibility?
  • specify ip address for docker for mac
  • 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.