user3547774
user3547774

Reputation: 1689

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?

Upvotes: 1

Views: 118

Answers (2)

Samuel Toh
Samuel Toh

Reputation: 19248

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

Upvotes: 1

Filip Dupanović
Filip Dupanović

Reputation: 33650

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.

Upvotes: 1

Related Questions