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?

  • How can docker downloading new image output log messages can be supressed?
  • How to run script file(.sh file) inside Dockerfile? [closed]
  • Can I clone a paused Docker container?
  • When multiple networks in Docker compose ports aren't being mapped
  • Using ccache when building inside of docker
  • Docker unique container
  • Where are the packages installed with `apt-get install` in Docker containers?
  • Why ansible keeps recreating docker containers with state “started”
  • Unable to create docker virtual machine
  • aws ecs 403 error to login private registry
  • Packer Docker builder using chmod on Windows 10
  • Nginx and Docker - how to configure hosts
  • 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.