在docker中复制生成上下文之外的文件而不增加生成上下文的大小?

在docker中复制生成上下文之外的文件而不增加生成上下文的大小?,docker,Docker,我参考了类似的方法,但按照此方法将父目录中的所有文件添加到构建上下文中,在我的示例中,使其超过8gb。因此,问题是如何从父目录复制文件,而不向构建上下文添加文件 该项目的结构是: Project | |--docker-files | | | |-Dockerfile | |--Folder | | | |--file/to/be/copied | |--other files 使用-f标志,命令是dockerbuild-f docker files/Dockerfile-t

我参考了类似的方法,但按照此方法将父目录中的所有文件添加到构建上下文中,在我的示例中,使其超过8gb。因此,问题是如何从父目录复制文件,而不向构建上下文添加文件

该项目的结构是:

Project
|
|--docker-files
|   |
|   |-Dockerfile
|
|--Folder
|   |
|   |--file/to/be/copied
|
|--other files
使用-f标志,命令是docker
build-f docker files/Dockerfile-t name
在项目目录中执行


解决方案之一是包含.dockerginore文件,但它非常混乱,将docker文件放入子文件夹的全部目的是减小生成上下文的大小。

文件/要/被/复制
仅位于
文件夹
,因此您只需将此文件夹设置为生成上下文,如下所示:

docker build -f docker-files/Dockerfile -t abc:1 Folder
更新:

正如你在评论中所说:


我不想使用.dockrignore文件,因为文件夹和子文件夹中有许多文件需要忽略。无论如何,谢谢你澄清这一点-Kitwradr

如果您有很多事情要忽略,只需添加一个文件,您可以使用

.dockrignore

*
!file/to/be/copied

它将首先排除文件夹中的所有内容,然后为
文件/to/be/copy

提供一个例外,如果您不能使用
.dockringnore
,并且必须使用您描述的目录树,一种方法是在
Docker build
之前在本地系统上创建备用Docker build上下文树

在内部,
docker build
的工作方式是创建上下文目录的tar文件,通过Unix套接字通过HTTP将其发送到docker守护进程,然后将其解包。即使
$DOCKER\u HOST
指向一个VM或另一个系统,这也会起作用,但这意味着DOCKER拒绝告诉自己实际构建上下文来自何处。将树从主机复制到Docker守护进程是缓慢的部分(即使在纯本地系统上也是如此)

所以你可以这样做:

rm -rf docker-build
mkdir docker-build
cp docker-files/Dockerfile docker-build
cp -a Folder docker-build
docker build -t ... docker-build
构建上下文中没有明确的
cp
'd


如果出于任何原因,您更愿意在Docker之外执行构建序列的一部分(例如,重用一个非常好的非Docker构建序列并打包结果),那么这也相当有效。这也是Makefile擅长维护的结构,如果您使用Make,那么它会将文件夹中的所有文件添加到构建上下文中,对吗?我只想将所需文件复制到图像中,因此,
文件夹中不需要的文件
不在
项目中
?那么,没有办法,
.dockrignore
是解决此问题的唯一方法,但我不知道您为什么不想使用它。我不想使用.dockrignore文件,因为文件夹和子文件夹中有许多文件需要忽略。无论如何,谢谢你澄清我认为这不是一个原因,你可以使用
要执行此操作,请参阅更新的答案。