在docker中复制生成上下文之外的文件而不增加生成上下文的大小?
我参考了类似的方法,但按照此方法将父目录中的所有文件添加到构建上下文中,在我的示例中,使其超过8gb。因此,问题是如何从父目录复制文件,而不向构建上下文添加文件 该项目的结构是:在docker中复制生成上下文之外的文件而不增加生成上下文的大小?,docker,Docker,我参考了类似的方法,但按照此方法将父目录中的所有文件添加到构建上下文中,在我的示例中,使其超过8gb。因此,问题是如何从父目录复制文件,而不向构建上下文添加文件 该项目的结构是: Project | |--docker-files | | | |-Dockerfile | |--Folder | | | |--file/to/be/copied | |--other files 使用-f标志,命令是dockerbuild-f docker files/Dockerfile-t
Project
|
|--docker-files
| |
| |-Dockerfile
|
|--Folder
| |
| |--file/to/be/copied
|
|--other files
使用-f标志,命令是dockerbuild-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文件,因为文件夹和子文件夹中有许多文件需要忽略。无论如何,谢谢你澄清我认为这不是一个原因,你可以使用代码>要执行此操作,请参阅更新的答案。