Copy multiple directories with one command

Solution 1:

That's the documented behavior of the copy command:

If <src> is a directory, the entire contents of the directory are copied, including filesystem metadata.

Note: The directory itself is not copied, just its contents.

Best workaround I can suggest is to change your directory layout in your build folder, move the three folders under one parent folder and add the parent.

Solution 2:

As BMitch answered, that is expected COPY behaviour.

An alternative would be to ADD the contents of a tarball.

Create the initial tarball

tar -cvf dirs.tar dirone/ dirtwo/ dirthree/

Add it to the build

FROM busybox
ADD dirs.tar /
CMD find /dirone /dirtwo /dirthree

The tarball is automatically extracted

○ →docker run c28f96eadd58
/dirone
/dirone/one
/dirtwo
/dirtwo/two
/dirthree
/dirthree/three

Note that every time you update the tar file you are invalidating the Docker build cache for that step. If you are dealing with a lot of files you might want to be smart about when you do the tar -c. You could also use tar -u if you can deal with files not being automatically deleted from the tarball.

[ -f dirs.tar ] && tar -uf dirs.tar something || tar -cf dirs.tar something