gpt4 book ai didi

Docker COPY 行为不一致

转载 作者:行者123 更新时间:2023-12-04 21:08:16 25 4
gpt4 key购买 nike

我想将列入白名单的文件夹从文件系统复制到目标容器中。

基本上我想执行“复杂”操作cp -r app vendor target ,其中 target是一个 Docker 容器。

我有一个简单的 Docker 文件:

FROM alpine

COPY app/* /www/
COPY vendor /www/

由于未知原因,第一个命令不会复制 app目录本身。 Docker好像没有区分 app的区别和 app/这很令人恼火。

出于测试目的,我创建了以下结构:
.
├── app
│   ├── foo
│   └── second
│   └── barf
├── Dockerfile
└── vendor
└── bar
docker build -t test . && docker run -it test ash :

结果?不保留目录结构且不复制父目录。
/www/
├── bar
├── barf
└── foo
docker info :
Server Version: 1.12.1
Storage Driver: overlay2
Backing Filesystem: extfs

谁能解释我为什么 Docker 的 COPY . /targetCOPY app/* /target行为不同?动机是什么?为什么 Docker 不使用 UNIX 的标准语义 cp命令?

最佳答案

通常,COPY 指令从“/app”复制文件和/或目录,并将它们添加到路径“/www/”的容器中。如果您想在“/www/”中有一个“app”目录,那么您的 COPY 指令应该如下所示:

COPY /app /www/app/

您可以在 documentation 中阅读有关 COPY 指令的更多信息.在这里,我粘贴了来自 it 的这种行为的解释:

If is a directory, the entire contents of the directory are copied, including filesystem metadata. Note:The directory itself is not copied, just its contents.



关于你的更新: COPY . /targetCOPY app /target行为相同。它需要全部内容 来自 源目录(来自 app 或来自 . 目录)并将其复制到 /target目录。

当您使用通配符时,您会看到略有不同的行为,例如。 COPY app/* /www/ .它从 app/ 复制所有文件至 /www/但随后它会处理来自 app/ 的每个目录像源一样将其内容复制到 /www/ .
为什么在 Docker 中 COPY不像在 UNIX 的 cp 中那样实现命令?我不知道,但如果你愿意,你可以用自己的实现创建拉取请求:)

关于Docker COPY 行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40436295/

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