Dockerfile副本保留子目录结构

tnkciper  于 2022-11-02  发布在  Docker
关注(0)|答案(5)|浏览(166)

我试图从我的本地主机复制一些文件和文件夹到一个docker映像构建。
文件如下所示:

folder1/
    file1
    file2
folder2/
    file1
    file2

我试着这样复制:

COPY files/* /files/

但是,folder1/folder2/中的所有文件都直接放在/files/中,而不放在它们的文件夹中:

files/
    file1
    file2

在Docker中有没有一种方法可以保留子目录结构,同时将文件复制到它们的目录中?例如:

files/
    folder1/
        file1
        file2
    folder2/
        file1
        file2
tp5buhyn

tp5buhyn1#

使用此Dockerfile从COPY中删除星星:

FROM ubuntu
COPY files/ /files/
RUN ls -la /files/*

结构是存在的:

$ docker build .
Sending build context to Docker daemon 5.632 kB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu
 ---> d0955f21bf24
Step 1 : COPY files/ /files/
 ---> 5cc4ae8708a6
Removing intermediate container c6f7f7ec8ccf
Step 2 : RUN ls -la /files/*
 ---> Running in 08ab9a1e042f
/files/folder1:
total 8
drwxr-xr-x 2 root root 4096 May 13 16:04 .
drwxr-xr-x 4 root root 4096 May 13 16:05 ..
-rw-r--r-- 1 root root    0 May 13 16:04 file1
-rw-r--r-- 1 root root    0 May 13 16:04 file2

/files/folder2:
total 8
drwxr-xr-x 2 root root 4096 May 13 16:04 .
drwxr-xr-x 4 root root 4096 May 13 16:05 ..
-rw-r--r-- 1 root root    0 May 13 16:04 file1
-rw-r--r-- 1 root root    0 May 13 16:04 file2
 ---> 03ff0a5d0e4b
Removing intermediate container 08ab9a1e042f
Successfully built 03ff0a5d0e4b
relj7zay

relj7zay2#

或者,您可以使用“.”代替 *,因为这将获取工作目录中的所有文件,包括文件夹和子文件夹:

FROM ubuntu
COPY . /
RUN ls -la /
sxissh06

sxissh063#

要将本地目录**合并 * a到映像内的目录中,请执行此操作。它不会删除映像中已存在的文件。它只会添加本地存在的文件,如果已存在同名文件,则会覆盖映像中的文件。

COPY ./local-path/. /image-path/
qlzsbp2j

qlzsbp2j4#

我无法得到这些答案中的任何一个。我不得不为当前目录添加一个点,这样工作的docker文件看起来就像这样:

FROM ubuntu 
WORKDIR /usr/local
COPY files/ ./files/

此外,使用RUN ls来验证对我来说不起作用,让它工作看起来真的很复杂,一个更容易的方法来验证什么是在docker文件是运行一个交互式外壳,并检查出什么是在那里,使用docker run -it <tagname> sh

bksxznpy

bksxznpy5#

如果你想复制一个完整的源目录与相同的目录结构,那么不要使用星星(*).写COPY命令在Dockerfile如下.

COPY . destinatio-directory/

相关问题