从命令行指定dockerignore

6ojccjat  于 2023-06-05  发布在  Docker
关注(0)|答案(1)|浏览(703)

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

docker build --ignore="node_modules" -t foo .

有没有一种方法可以从命令行做到这一点?我在docs中没有看到这个:https://docs.docker.com/engine/reference/commandline/build/#build-with--

wfveoks0

wfveoks01#

2018:不,docker build不提供.dockerignore文件的替代方案。
这就是为什么我通常保持一个符号链接.dockerignore指向实际的.dockerignore_official,除了某些情况下,我把符号链接切换到.dockerignore_module
这是一种变通方法,但它允许我对可能需要的不同版本的dockerignore进行版本化,并在两者之间进行选择。
2019年4月更新:正如Alba Mendez在评论中提到的,PR 901应该有助于:

dockerfile:添加dockerignore覆盖支持

前端将首先检查<path/to/Dockerfile>.dockerignore,如果找到,将使用它来代替根.dockerignore
参见moby/buildkit commit b9db1d2
它在Docker v19.03.0 beta1中,Alba在这里发布了一个示例:
您需要启用Buildkit模式以用途:

$ 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

2019年8月更新:这现在在Docker 19.03中,下面是来自Tõnis Tiigi的注解:

  • #12886(comment)允许在仓库包含多个Dockerfile的情况下为每个Dockerfile设置一个dockerignore文件。(注意,这是最初问题的确切描述)
  • BuildKit会自动忽略未使用的文件,从而自动消除不同文件集需要相互忽略的问题。
  • 相同的Dockerfile使用不同的文件集用于不同的构建“模式”的情况(例如dev vs prod)可以通过多阶段构建和使用构建参数定义模式更改来实现。

注意:2023年5月发布的问题37129“添加对多个(命名)构建上下文的支持”报告,现在支持:

另见“Build docker image using different directory contexts

相关问题