Copy multiple directories with one command

吃可爱长大的小学妹 提交于 2019-12-04 02:44:41

问题


Is there any way to copy multiple directories in one command, to reduce the number of layers? E.g., instead of:

COPY dirone ./dirone
COPY dirtwo ./dirtwo
COPY dirthree ./dirthree

I want to do:

COPY dirone/ dirtwo/ dirthree/ ./

However, this copies the contents of the directories... but I want to copy the directories themselves.


回答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.




回答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


来源:https://stackoverflow.com/questions/37715224/copy-multiple-directories-with-one-command

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!