如果在 Dockerfile 顶部声明的 ARG 被更改,但其值仅用于 Dockerfile 末尾附近的 RUN 命令,Docker 是从头开始重建整个镜像还是能够重新使用中间的相关 RUN 命令之前的图像?

为了更好地利用分层,我应该将我的 ARG 声明放在 Dockerfile 的顶部,还是就在使用它们的部分之前?

我想我的问题的一部分是 ARG 指令是否生成中间层。

最佳答案

比接受的响应更准确,并非所有行都在 ARG 声明后缓存无效。只有那些使用 ARG 值和 RUN s 的值。 docker 文档的详细信息:

  • https://docs.docker.com/engine/reference/builder/#impact-on-build-caching

  • 您必须将 ARG s 移到不需要参数的 RUN s 下,以保持层缓存优化。
    欲了解更多信息:
  • https://github.com/moby/moby/issues/18017
  • https://github.com/moby/moby/pull/18161
  • 此处运行说明:https://github.com/moby/moby/pull/21885
  • 关于docker - 将 ARG 放在 Dockerfile 顶部是否会阻止层重用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41593135/

    10-16 17:40