从命令行指定 dockerignore

Ale*_*lls 6 docker dockerfile

我有一个 .dockerignore 文件,但对于一个用例,我想在命令行指定 .dockerignore 的内容,例如:

docker build --ignore="node_modules" -t foo . 
Run Code Online (Sandbox Code Playgroud)

有没有办法从命令行执行此操作?我没有在文档中看到这一点:https : //docs.docker.com/engine/reference/commandline/build/#build-with--

Von*_*onC 8

不,docker build不提供.dockerignore文件的替代品。

这就是为什么我通常会保留一个.dockerignore指向实际的符号链接.dockerignore_official,除了某些情况,我将符号链接切换为.dockerignore_module

这是一种解决方法,但这允许我对可能需要的不同版本的 dockerignore 进行版本控制,并在两者之间进行选择。


2019 年 4 月更新:正如Alba Mendez评论中提到的,PR 901应该会有所帮助:

dockerfile:添加 dockerignore 覆盖支持

前端将首先检查<path/to/Dockerfile>.dockerignore,如果找到,它将代替 root 使用.dockerignore

请参阅moby/buildkit提交 b9db1d2

它在Docker v19.03.0 beta1 中Alba这里发布了一个示例

您需要启用 Buildkit 模式才能使用 i

$ export DOCKER_BUILDKIT=1

$ echo "FROM ubuntu \n COPY . tmp/" > Dockerfile
$ cp Dockerfile Dockerfile2
$ touch foo bar
$ echo "foo" > .dockerignore
$ echo "bar" > Dockerfile2.dockerignore

$ docker build -t container1 -f Dockerfile .
$ docker build -t container2 -f Dockerfile2 .
$ docker run container1 ls tmp
Dockerfile
Dockerfile2
Dockerfile2.dockerignore
bar

$ docker run container2 ls tmp
Dockerfile
Dockerfile2
Dockerfile2.dockerignore
foo
Run Code Online (Sandbox Code Playgroud)

2019 年 8 月更新:现在在 Docker 19.03 中,以下来自Tõnis Tiigi 的评论:

  • #12886(评论)如果存储库包含许多文件,则允许为每个 Dockerfile 设置一个 dockerignore 文件。(请注意,这是最初问题的确切描述)
  • BuildKit 自动忽略未使用的文件,自动消除不同组文件需要相互忽略的问题。
  • 可以通过多阶段构建并使用构建参数定义模式更改来实现相同 Dockerfile 为不同“模式”构建(例如,开发与生产)使用不同文件集的情况。

  • @AlexanderMills 干得好。我已经订阅了(还有12886和37129) (2认同)
  • @AlbaMendez 谢谢。更新。我意识到我已经在 /sf/answers/3001745771/ 中包含了该评论。 (2认同)