Docker COPY 命令复制目录时的注意事项及解决策略

创始人
2024-12-23 12:44:07
0 次浏览
0 评论

DockerCOPY复制文件夹的诡异行为

在构建Docker映像时,如果需要复制特定目录中的所有文件和子目录,请在Dockerfile中使用COPY命令,但您会得到奇怪的行为,并且目录结构将被更改。

初始目录结构如下。

实际结果是:

可以看到`dir1`目录还没有被复制到镜像中。
,包含其子目录中的目录和文件。
同时,与`dir1`同级的文件也会被复制。
此行为表明执行COPY命令时,第一级目录被“解压缩”。

进行测试是为了更好地了解COPY和ADD命令的工作原理。

测试结果揭示了COPY/ADD命令的几个规则。

ADD命令的工作方式与COPY命令类似,用于复制文件。

当使用*作为源时,表示当前目录下的所有文件。

如果源是目录,则COPY/ADD命令复制目录的内容,而不是目录本身。

COPY./*target中*对应的逻辑如下:

文件系统中的目录和文件本质上都是文件。
当您运行cp*target时,cp命令将该目录视为文件并将其内容复制到目标路径。
这与复制文件本身相同。
当Docker的COPY/ADD命令复制一个目录时,它实际上复制了它的内容。

这种行为模式招致了批评,但Docker似乎还没有调整这种逻辑。
要跟踪Docker开发,请参阅以下文档:

stackoverflow.com/questions/

github.com/moby/moby/issues/

github.com/莫比/莫比/问题/

dockerfilecopy复制目录遇到的问题

构建Docker镜像时,可以使用COPY命令轻松将本地文件或目录复制到容器中的指定位置。
如果目标是复制整个目录及其内容,则Dockerfile语法应如下所示:dockerfileCOPY目录路径目标路径例如,假设您有一个名为“app”的目录,并打算将其复制到“/usr/”在容器目录下的src/app中,输入以下Dockerfile:dockerfileCOPYapp/usr/src/app此操作会将本地的app目录及其全部内容复制到容器的/usr/src/app中。
确保“app”目录与Dockerfile位于同一目录中,或者使用相对或绝对路径正确指定源目录位置。
如果只需要复制目录中的特定文件,则只需在命令中指定文件路径即可。
例如,将'app'目录中的文件'file.txt'复制到容器的同名文件中应写成如下:dockerfileCOPYapp/file.txt/usr/src/app/file.txt使用“COPY”语句可以灵活实现Docker镜像构建中的文件复制需求,简化部署流程。
提高开发效率。
热门文章
1
C语言字符串常量解析:区别、用途及存储方... 什么是字符串常量字符串常量是C语言中的一种数据类型,它是由一对双引号括起来的字符...

2
C语言printf函数:格式字符串与输出... printf函数中的格式与输出项有什么关系?在C语言中,printf函数中的格式...

3
Excel技巧:计算字符串起始位置与合并... 如何计算字符串在特定文本中的起始位置,怎么计算字符串在特定文本中的起始位置您可以...

4
Python发音全解:掌握正确的发音方法... python怎么读我的很多学习编程的朋友可能都知道Python这个词,但是他们中...

5
字符与字符串:编程中的基础文本类型解析 字符串什么意思字符串是由数字、字母和下划线组成的字符串,表示为s=“a1a2…a...

6
Python编程语言:多领域应用与开发优... Python的作用是什么?Python是一种跨平台计算机编程语言,是ABC语言的...

7
深度解析:C语言编程特点与应用领域 什么叫c语言C语言是一种编程语言。C编程语言应用广泛,具有以下特点和特点:1.语...

8
Java全解析:跨平台编程语言的魅力与多... java是什么Java是一种功能强大的编程语言,被称为“一次编写,随处运行”模型...

9
C语言文本文件指定行输出技巧及汉字处理方... C语言如何从文本文件中输出指定行文字#include#include#inclu...

10
C语言字符串长度与内存占用解析:空字符与... 内存中的长度在C中,字符串的长度和字符串在内存中占用的字节数是两个概念。(1)长...