【问题标题】:Specify dockerignore from command line从命令行指定 dockerignore
【发布时间】:2018-11-05 22:23:22
【问题描述】:

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

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

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

【问题讨论】:

标签: docker dockerfile


【解决方案1】:

不,docker build 不提供.dockerignore file 的替代方案。

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

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


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

dockerfile:添加 dockerignore 覆盖支持

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

moby/buildkit commit b9db1d2

Docker v19.03.0 beta1Alba发了example here

您需要启用 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

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

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

【讨论】:

  • @AlexanderMills 干得好。我已经订阅了(还有12886和37129)
  • 一个拉取请求刚刚合并到 BuildKit github.com/moby/buildkit/pull/901,希望它很快就会登陆 Docker。
  • @AlbaMendez 谢谢。我已将您的评论包含在答案中以提高知名度。
  • 更新:该功能刚刚登陆Docker 19.03.0-beta1,并在测试频道中可用。需要开启Buildkit模式才能使用,我贴了一个使用示例here
  • @AlbaMendez 谢谢。更新。我意识到我已经在stackoverflow.com/a/42882082/6309 中包含了该评论。
猜你喜欢
  • 2012-11-12
  • 2023-04-08
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
相关资源
最近更新 更多