有没有办法在一个ADDCOPY命令(dockerfile)中同时ADDCOPY目录和文件?

问题描述 投票:0回答:1

在我的dockerfile中,我试图将一个文件和一个目录ADDCOPY到destinationFolder中。预期的输出是。

destinationFolder/test.txt
destinationFolder/test_dir/*

然而,在 ADD指令(如注中所述)但目录本身并没有被复制,只是复制了它的内容。

ADD test.txt test_dir /destinationFolder/

有没有办法用一条ADDCOPY命令就能达到预期的输出?

docker dockerfile docker-image docker-build
1个回答
0
投票

根据你当前项目目录的具体内容,有2种解决方案。但基本思路是一样的:将所有的内容都放在同一个目录下,然后将该目录下的内容直接推送到映像中的目标目录下。

此外,正如在 Docker最佳实践我建议你用 COPY 而不是 ADD 如果你不需要任何特殊功能,从最新的。

将您的内容移动到一个单独的文件夹

所有你想推送到目标文件夹的内容都可以放在一个专门的文件夹里,你可以一次性推送。

在你的项目文件夹里,你可以

mkdir imageContents
mv test.text test_dir imageContents

而你用修改你的Dockerfile。

COPY imageContents destinationFolder/

从你的项目根目录中复制出准确的结构。

这个想法是一样的,除了你直接把根目录或你的项目推送到你的图像上。这也将适用于你放在那里的任何其他文件夹,而且不会被忽略。请注意,你可以用这个方法在现有的文件夹结构中简单地添加一些文件(就像在 /etc/ 结构)。)

创建一个 .dockerignore 文件,以确保你只复制相关内容。

.dockerignore
Dockerfile
.git
# Add any other files that should be out of context
# Dummy examples below
.yamllint
mysecretfiles

重现你想推送到图片上的确切文件结构,在你的情况下。

mkdir destinationFolder
mv test.txt test_dir destinationFolder

最后再添加一些你想推送到图片上的其他文件

mkdir -p etc/myapp
echo "config1=myvalue" > etc/myapp/myapp.conf

并将你的Docker文件修改为

COPY . /

制作你自己的方法

你可以很容易地混合上述两种方法,以适应你的确切需求,无论你的图像文件中的任何目的地。

© www.soinside.com 2019 - 2024. All rights reserved.