jon*_*alv 28 docker dockerfile
我在Dockerfile中尝试了以下命令:COPY * /
并且对结果感到非常惊讶.似乎天真的docker代码遍历glob中的目录,然后将每个文件转储到目标目录中,同时忽略我的目录结构.
至少这就是我理解这张票的方式,它肯定对应于我得到的结果.
我想这种行为仍然存在的唯一原因必须是应该采取其他一些方法.但对于一只脑力很小的熊来说,了解如何,有谁知道呢?
Bal*_*i M 13
就像@Vonc所说,没有可能像现在这样添加命令.唯一的解决方法是提及文件夹,创建它并向其中添加内容.
# add contents to folder
ADD src $HOME/src
Run Code Online (Sandbox Code Playgroud)
将在您的目录中创建一个名为src的文件夹,并将文件夹src的内容添加到此文件夹中.
Mik*_*hva 13
我不完全理解原始海报的情况,但我可以证明可以使用 Dockerfile 中的 COPY 复制目录结构。
假设您有以下文件夹结构:
folder1
file1.html
file2.html
folder2
file3.html
file4.html
subfolder
file5.html
file6.html
Run Code Online (Sandbox Code Playgroud)
要将其复制到目标映像,您可以使用这样的 Dockerfile 内容:
FROM nginx
COPY ./folder1/ /usr/share/nginx/html/folder1/
COPY ./folder2/ /usr/share/nginx/html/folder2/
RUN ls -laR /usr/share/nginx/html/*
Run Code Online (Sandbox Code Playgroud)
输出结果docker build .
如下:
$ docker build --no-cache .
Sending build context to Docker daemon 9.728kB
Step 1/4 : FROM nginx
---> 7042885a156a
Step 2/4 : COPY ./folder1/ /usr/share/nginx/html/folder1/
---> 6388fd58798b
Step 3/4 : COPY ./folder2/ /usr/share/nginx/html/folder2/
---> fb6c6eacf41e
Step 4/4 : RUN ls -laR /usr/share/nginx/html/*
---> Running in face3cbc0031
-rw-r--r-- 1 root root 494 Dec 25 09:56 /usr/share/nginx/html/50x.html
-rw-r--r-- 1 root root 612 Dec 25 09:56 /usr/share/nginx/html/index.html
/usr/share/nginx/html/folder1:
total 16
drwxr-xr-x 2 root root 4096 Jan 16 10:43 .
drwxr-xr-x 1 root root 4096 Jan 16 10:43 ..
-rwxr-xr-x 1 root root 7 Jan 16 10:32 file1.html
-rwxr-xr-x 1 root root 7 Jan 16 10:32 file2.html
/usr/share/nginx/html/folder2:
total 20
drwxr-xr-x 3 root root 4096 Jan 16 10:43 .
drwxr-xr-x 1 root root 4096 Jan 16 10:43 ..
-rwxr-xr-x 1 root root 7 Jan 16 10:32 file3.html
-rwxr-xr-x 1 root root 7 Jan 16 10:32 file4.html
drwxr-xr-x 2 root root 4096 Jan 16 10:33 subfolder
/usr/share/nginx/html/folder2/subfolder:
total 16
drwxr-xr-x 2 root root 4096 Jan 16 10:33 .
drwxr-xr-x 3 root root 4096 Jan 16 10:43 ..
-rwxr-xr-x 1 root root 7 Jan 16 10:32 file5.html
-rwxr-xr-x 1 root root 7 Jan 16 10:32 file6.html
Removing intermediate container face3cbc0031
---> 0e0062afab76
Successfully built 0e0062afab76
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 10
如您的机票中所述:
你有
COPY files/* /test/
扩展到COPY files/dir files/file1 files/file2 files/file /test/
.
如果将其拆分为单独的COPY
命令(例如COPY files/dir /test/
),您将看到(无论好坏)COPY
将每个arg的内容复制dir
到目标目录中.不是argdir
本身,而是内容.我并不为COPY不保留顶级目录这一事实而感到激动,但现在已经有一段时间了.
所以在保留向后兼容性的名义下,不可能是COPY
/ ADD
目录结构.
唯一的解决方法是RUN mkdir -p /x/y/z
构建目标目录结构,然后是一系列docker ADD
(每个要填充的文件夹一个).
(ADD
不是COPY
,根据评论)
ADD
(docs)该ADD
命令可以作为<src>
参数接受:
ADD folder /path/inside/your/container
要么
tar -cvzf newArchive.tar.gz /path/to/your/folder
然后,您可以在Dockerfile中添加一行,如下所示:
ADD /path/to/archive/newArchive.tar.gz /path/inside/your/container
笔记:
ADD
将自动提取您的存档. COPY . <destination>
在你的情况下:
COPY . /
使用ADD
代替COPY
。假设您要将目录src中的所有内容从主机复制到容器中的目录dst:
ADD src dst
Run Code Online (Sandbox Code Playgroud)
注意:b将在容器中自动创建。
归档时间: |
|
查看次数: |
67144 次 |
最近记录: |