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
JavaScript数组转字符串:两种方... 如何 用 js把 数组 转换成 字符串这里的系列窗口为您提供了两种方式。1。使用...

2
C语言实现三角形面积计算:海伦公式应用实... 如何用c语言编写已知三角形三边求面积?已知语言C可以找到三角形三角侧的面积,如下...

3
计算机专业核心:C语言在多学科中的应用与... 哪些专业学c语言对于计算机专业来说,入门级编程语言C是用来为学生的编程打下坚实的...

4
JSF架构解析与Java学习资源分享:J... JavaServerFacesJSF体系结构JavaServerFaces(JS...

5
数据结构C语言版深度解析与C语言入门很简... 《数据结构(C语言版)》.严蔚敏吴伟民著.pdf在《数据结构(C语言版)》一书中...

6
C语言字符串常量解析:区别、用途及存储方... 什么是字符串常量字符串常量是C语言中的一种数据类型,它是由一对双引号括起来的字符...

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

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

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

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