gpt4 book ai didi

docker - Dockerfile COPY仅复制应复制目录的一个子目录

转载 作者:行者123 更新时间:2023-12-02 19:14:37 25 4
gpt4 key购买 nike

我有这样的目录结构:

opt
- dcmtk-3.6.5-linux-x86_64-static
| - bin
| - etc
| - share

在每个子目录中也都有一些文件。
Dockerfile中我有一行
COPY opt/* /opt/
但是,当我从该图像创建容器并运行 /bin/bash,然后转到 /opt并运行 ls -al时,我只能看到 bin目录及其内容。没有 dcmtk-3.6.5-linux-x86_64-static目录,没有其他子目录,例如 etcshare
我还有一些其他文件保存在 opt中,这些文件已按预期复制。
为什么不复制整个 dcmtk-3.6.5-linux-x86_64-static

最佳答案

正如documentation所说:

If <src> is a directory, the entire contents of the directory are copied, including filesystem metadata.


因此,您应该使用以下内容:
COPY opt /opt
只需省略 /*并仅指定目录即可。
编辑01.10.2020 :
只需使用以下设置再次尝试:
ls -lR
total 8
-rw-r--r-- 1 peter staff 34 1 Okt 13:06 Dockerfile
drwxr-xr-x 4 peter staff 128 1 Okt 13:01 opt

./opt:
total 0
drwxr-xr-x 2 peter staff 64 1 Okt 13:01 emptydir
drwxr-xr-x 4 peter staff 128 1 Okt 13:01 foo

./opt/emptydir:

./opt/foo:
total 0
drwxr-xr-x 3 peter staff 96 1 Okt 13:01 bar
-rw-r--r-- 1 peter staff 0 1 Okt 13:01 foo.txt

./opt/foo/bar:
total 0
-rw-r--r-- 1 peter staff 0 29 Sep 19:15 bar.txt
Dockerfile:
FROM busybox:latest
COPY opt /opt
建立图像:
docker build -t so-test .
Sending build context to Docker daemon 5.12kB
Step 1/2 : FROM busybox:latest
---> 6858809bf669
Step 2/2 : COPY opt /opt
---> Using cache
---> f6f2692b571a
Successfully built f6f2692b571a
Successfully tagged so-test:latest
运行容器:
docker run -it so-test /bin/sh
/ #
并检查其中的内容:
# ls -lR /opt
/opt:
total 8
drwxr-xr-x 2 root root 4096 Oct 1 11:01 emptydir
drwxr-xr-x 3 root root 4096 Oct 1 11:01 foo

/opt/emptydir:
total 0

/opt/foo:
total 4
drwxr-xr-x 2 root root 4096 Oct 1 11:01 bar
-rw-r--r-- 1 root root 0 Oct 1 11:01 foo.txt

/opt/foo/bar:
total 0
-rw-r--r-- 1 root root 0 Sep 29 17:15 bar.txt
这样就复制了整个目录结构,包括空目录。
设置中一定有干扰

关于docker - Dockerfile COPY仅复制应复制目录的一个子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64123861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com