Docker: adding a file from a parent directory

时间:2021-10-27 22:13:34

In my Dockerfile I've got :

ADD ../../myapp.war /opt/tomcat7/webapps/

That file exists as ls ../../myapp.war returns me the correct file but when I execute sudo docker build -t myapp . I've got :

Step 1 : ADD ../../myapp.war /opt/tomcat7/webapps/
2014/07/02 19:18:09 ../../myapp.war: no such file or directory

Does somebody know why and how to do it correctly?

asked Jul 2 '14 at 17:24
Docker: adding a file from a parent directory
Anthony O.
3,5103365
 

3 Answers

up vote21down voteaccepted

Unfortunately, (for practical and security reasons I guess), if you want to add/copy local content, it must be located under the same root path than the Dockerfile.

From the documentation:

The <src> path must be inside the context of the build; you cannot ADD ../something/something, because the first step of a docker build is to send the context directory (and subdirectories) to the docker daemon.

EDIT: There's now an option (-f) to set the path of your Dockerfile ; it can be used to achieve what you want, see @Boedy 's response nelow.

answered Jul 2 '14 at 20:01
Docker: adding a file from a parent directory
mbarthelemy
5,56512228
 
5  
Is there a "clean" workaround for this? I'd rather not restructure my whole project directory just to accommodate this. – ben_frankly Nov 21 '14 at 18:35
    
As said by @Günter, there is a workaround here superuser.com/a/842690/136024 ... is it really "clean"? Well at least it's a "workaround" :) – Anthony O. Dec 2 '14 at 8:39
    
See better answer from @Boedy *.com/a/34300129/2950621 – nmgeek Jun 19 at 19:27
Docker: adding a file from a parent directoryDocker: adding a file from a parent directory

You can build the Dockerfile from the parent directory:

docker build -t <some tag> -f <dir/dir/Dockerfile> .
answered Dec 15 '15 at 21:54
Docker: adding a file from a parent directory
Boedy
388515
 
    
Worked smoothly ;) – Souciance Eqdam Rashti Mar 2 at 10:51
    
Thank you! This works fine on a local box, but Docker Hub fails to build the image since it tries to do it from its same directory (tbh, just what one would normally expect). Is there any way to do the same trick in Docker Hub? – Marcel Hernandez Mar 25 at 20:31
    
Not that I know of. You could push the image to the registry instead of using automated build. – Boedy Mar 29 at 9:15 
1  
This should be marked as the right answer – Courtland Caldwell Jun 15 at 19:09

The solution for those who use composer is to use a volume pointing to the parent folder:

#docker-composer.yml

foo:
build: foo
volumes:
- ./:/src/:ro

But I'm pretty sure the can be done playing with volumes in Dockerfile.