0

所以,我有一个虚拟项目,其文件结构如下所示:

docker-magic
├── Dockerfile
├── .dockerignore
├── just_a_file
├── src
│   ├── folder_one
│   │   ├── main.go
│   │   └── what_again.sh
│   ├── folder_two
│   │   └── what.kts
│   └── level_one.go
└── top_level.go

我的 Dockerfile 看起来像这样:

FROM ubuntu:latest as builder

WORKDIR /workdir

COPY ./ ./

RUN find . -type f

ENTRYPOINT ["echo", "wow"]

我使用命令构建此图像docker build . -t docker-magic:test --no-cache以避免缓存结果。

这个想法很简单 - 我将文件docker-magic夹中的所有文件复制到我的图像中,然后通过find . -type f.

我也想忽略一些文件。我用一个.dockerignore文件来做到这一点。根据官方 Docker 文档

的摆放位置!异常规则会影响行为:与特定文件匹配的 .dockerignore 的最后一行决定了它是包含还是排除。

让我们考虑以下内容.dockerignore

**/*.go

它应该排除所有 .go 文件。确实如此!我从 find 中得到以下内容:

./.dockerignore
./src/folder_one/what_again.sh
./src/folder_two/what.kts
./just_a_file
./Dockerfile

接下来,让我们忽略一切。.dockerignore就是现在:

**/*

而且,正如预期的那样,我从 find 得到空输出。

现在变得困难了。我想忽略除 .go 文件之外的所有文件。根据文档,它将如下:

**/*

!**/*.go

但我从 find 中得到以下输出:

./top_level.go

这显然不是预期的,因为正如我们所见,其他 .go 文件也匹配此模式。如何获得我想要的结果 - 仅将 .go 文件复制到我的图像?

编辑:我的 Docker 版本是20.10.5, build 55c4c88.

4

0 回答 0