Dockerfile VOLUME not working while -v works

When I pass volume like -v /dir:/dir it works like it should

But when I use VOLUME in my dockerfile it gets mountend empty

My Dockerfile looks like this

FROM ubuntu:16.04                                         

RUN apt-get update                                        
RUN apt-get install nano                                  
ENV Editor="/usr/bin/nano"                                

ARG UID=1000                                              
RUN useradd -u "$UID" -G root writer                      
RUN mkdir -p "/home/writer" && chown -R "$UID":1000 "/home/writer"

RUN mkdir -p "/home/stepik"                                  
RUN chown -R "$UID":1000 "/home/stepik"                        
VOLUME ["/home/stepik"]

USER writer

WORKDIR /home/stepik                                   
ENTRYPOINT ["bash"]

Upvotes: 2

Views: 233

Answers (1)

BMitch
BMitch

Reputation: 265085

Defining the volume on the Dockerfile only tells docker that the volume needs to exist inside the container, not where to get the volume from. It's the same as passing the option -v /dir instead of -v /dir:/dir. The result is an "anonymous" volume with a guid you can see in docker volume ls. You can't pass the option inside the Dockerfile to identify where to mount the volume from, images you pull from the docker hub can't mount an arbitrary directory from your host and send the contents of that directory to a black hat machine on the internet by design.

Note that I don't recommend defining volumes inside the Dockerfile. See my blog post on the topic for more details.

Upvotes: 5

Related Questions