使用 .dockerignore 忽略 docker 上下文的问题

问题描述 投票:0回答:2
 .
├── A
└── B
    ├── .dockerignore
    ├── Dockerfile
    └── run_script.sh

我的文件夹结构看起来与上面的树类似。我有一个 Dockerfile 和一个 .dockerignore 文件。我使用运行脚本来构建我的 docker 映像。在构建中,我从根发送整个上下文。因此,实际上,上下文包含文件夹 A 和 B。

运行脚本包含以下命令:

docker build docker build  -f  Dockerfile ..

在 .dockerignore 文件中,我想忽略文件夹 A 内的某些文件。 在 dockerignore 文档中,我基本上可以使用

*/ or **/
来忽略子目录,但是在这里使用它们似乎不能有效地忽略文件(因为它们位于父/根目录中)

以下这些命令没有帮助

 **/A
*/A

我尝试在根目录中包含 .dockerignore 文件(即根目录包含文件夹 A、B 和 .dockerignore - 这有效)。忽略文件包含:

A/
B/

所以我的问题是,是否有一种解决方案可以忽略构建上下文中存在的文件和文件夹,但技术上高于存储的 .dockerignore 级别?

docker docker-compose dockerfile dockerignore
2个回答
1
投票

.dockerignore
文件必须放置在上下文目录中(在您的情况下,该文件夹包含
A
B
)。

这在docs中指定:

要提高构建的性能,请通过将 .dockerignore 文件添加到上下文目录来排除文件和目录。

还有

这里

在 docker CLI 将上下文发送到 docker 守护进程之前,它会在上下文的根目录

中查找名为 .dockerignore 的文件。


0
投票
.dockerignore

需要位于构建上下文目录的根目录中,并且不能位于子目录中。

但是,现在可以使用 Dockerfile 1.4 和 Buildx v0.8+ 设置多个构建上下文。这允许您至少拥有多个 

.dockerignore

文件。

#syntax=docker/dockerfile:1.4
FROM … AS build1
COPY –from=app1 . /src
 
FROM … AS build2
COPY –from=app2 . /src
 
FROM …
COPY –from=build1 /out/app1 /bin/
COPY –from=build2 /out/app2 /bin/

然后构建:

docker buildx build –build-context app1=app1/src –build-context app2=app2/src .

参见 
https://www.docker.com/blog/dockerfiles-now-support-multiple-build-contexts/

© www.soinside.com 2019 - 2024. All rights reserved.