Copy directory to another directory using ADD command

Docker

Docker Problem Overview


I have read http://docs.docker.com/engine/reference/builder/#add however I met a problem. I want to copy the local directory go to docker /user/local/

I tried:

ADD go /usr/local/

and:

ADD /go/ /usr/local/ 

also:

RUN chmod 0755 /usr/local/go/src/make.bash

However, I see the following error message:

/usr/local/go/src/make.bash: No such file or directory

but the local go directory does contain make.bash.

Docker Solutions


Solution 1 - Docker

ADD go /usr/local/

will copy the contents of your local go directory in the /usr/local/ directory of your docker image.

To copy the go directory itself in /usr/local/ use:

ADD go /usr/local/go

or

COPY go /usr/local/go

Solution 2 - Docker

Indeed ADD go /usr/local/ will add content of go folder and not the folder itself, you can use Thomasleveil solution or if that did not work for some reason you can change WORKDIR to /usr/local/ then add your directory to it like:

WORKDIR /usr/local/
COPY go go/

or

WORKDIR /usr/local/go
COPY go ./

But if you want to add multiple folders, it will be annoying to add them like that, the only solution for now as I see it from my current issue is using COPY . . and exclude all unwanted directories and files in .dockerignore, let's say I got folders and files:

- src 
- tmp 
- dist 
- assets 
- go 
- justforfun 
- node_modules 
- scripts 
- .dockerignore 
- Dockerfile 
- headache.lock 
- package.json 

and I want to add src assets package.json justforfun go so:

in Dockerfile:

FROM galaxy:latest

WORKDIR /usr/local/
COPY . .

in .dockerignore file:

node_modules
headache.lock
tmp
dist

In this way, you ignore node_modules headache.lock tmp dist so they will not be added!

Or for more fun (or you like to confuse more people make them suffer as well :P) can be:

*
!src 
!assets 
!go 
!justforfun 
!scripts 
!package.json 

In this way you ignore everything, but exclude what you want to be copied or added only from the "ignore list".

It is a late answer but adding more ways to do the same covers even more cases.

Solution 3 - Docker

You can use COPY. You need to specify the directory explicitly. It won't be created by itself

COPY go /usr/local/go

Reference: Docker CP reference

Solution 4 - Docker

This can help if you want to add all files to a specified location

#ADD XML SUITE files ADD src/test/resources/xmls/* /usr/share/tag/

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionpengwangView Question on Stackoverflow
Solution 1 - DockerThomasleveilView Answer on Stackoverflow
Solution 2 - DockerAl-MothafarView Answer on Stackoverflow
Solution 3 - DockerAmstel D'AlmeidaView Answer on Stackoverflow
Solution 4 - DockerSritaj PatelView Answer on Stackoverflow