首页 > 解决方案 > skaffold 找不到它刚刚构建的图像

问题描述

我有以下脚手架

build:
  tagPolicy:
    sha256: {}
  artifacts:
    - image : sdk
      context: docker
      docker:
        dockerfile: Dockerfile.sdk
        buildArgs:
          CONFIGURATION: Debug
    - image : app
      context: docker
      docker:
        dockerfile: Dockerfile.app
        buildArgs:
          CONFIGURATION: Debug
    - image: azu
      context: rt/azu/src
      docker:
        dockerfile: Dockerfile.worker
        buildArgs:
          VERSION : Debug

前两个图像构建得很好。而第三个失败。第二个构建取决于第一个,第三个取决于第二个。然而,第三个失败了,"MANIFEST_UNKNOWN: manifest unknown"因为它试图从 docker hub 中检索它。如果我将第三个构建的上下文更改为 docker(这将使镜像构建失败),skaffold 会找到本地镜像。我能做些什么来保持正确的上下文并让 skaffold 意识到它不应该从 docker hub 中提取,而是使用本地构建的图像?

标签: kubernetesskaffold

解决方案


(顺便说一句:如果你不包括你的完整skaffold.yaml和你Dockerfile的 s 就很难提供帮助。只需编辑私密的部分。)

Skaffold“只是”编排构建,并且对底层构建器如何解析图像没有影响。但 Skaffold确实指示底层构建器应如何标记生成的图像。Skaffold 提供了一组标记策略

所以听起来你rt/azu/src/Dockerfile.worker的 aFROM没有引用你的app图像——也许图像的标记与你引用的不同。Skaffold 的默认标记器使用 git 提交,从而产生像app:v1.12.0-37-g6af3198f3-dirty.

如果我的怀疑是真的,那么您将需要使用envTemplate标记器,以便您构建的图像使用更可控和可预测的图像标记,您可以将其嵌入到您Dockerfile的 s.


推荐阅读