如何将文件夹从Dockerfile复制到Docker镜像?

我在我的Dockerfile中尝试了下面的命令: COPY * /并且对结果感到惊讶。 看起来天真的docker代码遍历glob中的目录,然后转储目标目录中的每个文件,同时恭敬地忽略我的目录结构。

至less我是这样理解这张票的 ,这当然对应于我得到的结果。

我猜这个行为仍然存在的唯一原因必须是有一些其他的方式应该这样做。 但是,要知道一个小脑袋怎么知道,怎么知道呢?

正如你的票上提到的 :

你有COPY files/* /test/其中扩大到COPY files/dir files/file1 files/file2 files/file /test/
如果你把它分解成单独的COPY命令(例如COPY files/dir /test/ ),你会看到(好或坏) COPY将把每个arg dir的内容复制到目标目录中。 不是arg dir本身,而是内容。

我对COPY不保留最高级目录的事实并不感到激动,但现在已经这样了。

所以为了保持向后兼容性,不可能COPY / ADD目录结构。

唯一的解决方法是一系列RUN mkdir -p /x/y/z来构build目标目录结构,然后是一系列docker COPY (每个文件夹要填充一个)。

就像@Vonc说的那样,现在不可能像现在这样添加一个命令。 唯一的解决方法是提及该文件夹,创build它并向其中添加内容。

 # add contents to folder ADD src $HOME/src 

将在您的目录中创build一个名为src的文件夹,并将您的文件夹src的内容添加到此目录中。

使用ADD而不是COPY 。 假设你想从容器中将主机中的所有东西从主机复制到目录dst:

 ADD src dst 

注意:b将在容器中自动创build。