在我的dockerfile中,我试图将一个文件和一个目录ADDCOPY到destinationFolder中。预期的输出是。
destinationFolder/test.txt
destinationFolder/test_dir/*
然而,在 ADD指令(如注中所述)但目录本身并没有被复制,只是复制了它的内容。
ADD test.txt test_dir /destinationFolder/
有没有办法用一条ADDCOPY命令就能达到预期的输出?
根据你当前项目目录的具体内容,有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 . /
你可以很容易地混合上述两种方法,以适应你的确切需求,无论你的图像文件中的任何目的地。