【问题标题】:Kubernetes fails to run locally built docker imageKubernetes 无法运行本地构建的 docker 镜像
【发布时间】:2021-04-01 19:52:14
【问题描述】:

我正在尝试运行使用 Kubernetes 在本地构建的 docker 映像。
出现以下错误

Failed to pull image "myImage": rpc error: code = Unknown desc = Error response from daemon: pull access denied for myImage, repository does not exist or may require 'docker login'

在我给出的 yaml 文件中

image: myImage 
imagePullPolicy: IfNotPresent

在本地,我使用的是 docker-desktop 和 minikube。

我尝试了多种方法,但唯一的方法是制作 myImage 的 tar 并加载到 minikube。 我曾尝试使用 eval $(minikube docker-env) 但在此之后我的图像无法构建,因为它正在从组织 nexus 服务器中提取基本图像。 任何人都可以建议其他方式吗?

【问题讨论】:

标签: docker kubernetes minikube docker-desktop


【解决方案1】:

很遗憾,我还不能发表评论,所以我必须发布答案。您尝试提取的图像 myImage 不存在于您的 kubernetes 集群的本地图像缓存中。运行docker image ls 命令应该会生成本地可用的图像列表。如果 docker 在本地没有找到镜像,它会(默认情况下)然后去 Docker Hub 查找镜像。看到列出的图像没有像someOrganization\ 这样的前缀,该图像被认为是 DockerHub 自己的官方发布的图像。由于您本地构建的映像不是官方的 Dockerhub 映像,因此它不知道要运行什么。所以问题的核心是您的 minikube 无法访问您构建映像的任何位置。不幸的是,我之前没有使用过 minikube,所以我无法评论如何使用它的任何复杂性。不过,如果我这样回答,那我就失职了,所以查看 minikube 的文档(参考:https://minikube.sigs.k8s.io/docs/handbook/pushing/#1-pushing-directly-to-the-in-cluster-docker-daemon-docker-env),您对 eval 的操作是正确的。

Sooo...您的 minikube 不是股票/香草,它来自公司回购?听起来您需要更改您的 minikube,或者您应该重新评估您正在使用的基本映像并修复 Dockerfile。

【讨论】:

    【解决方案2】:

    要解决此问题,请将 imagePullPolicy 设置为 Never

    确保在构建映像之前设置eval $(minikube docker-env)

    【讨论】:

    • 正如我在构建之前设置 eval $(minikube docker-env) 之后所说的那样。我的构建失败,出现以下错误将构建上下文发送到 Docker 守护进程 129.4MB 步骤 1/28:FROM nexus-repo:8097/ubi8/openjdk8:1.8.0_272 获取 nexus-repo:8097/v2:net/http: 请求在等待连接时取消( Client.Timeout 在等待标头时超出)
    • 是的,将“imagePullPolicy”设置为“Never”,这将开始工作。这里的重点是,如果镜像已经在本地注册表中,minikube 不需要拉取镜像。通过在构建之前设置“eval $(minikube docker-env)”,您可以确保 docker build 将映像放置在 minikubes 本地注册表中。
    • 如何在使用 dockerfile 构建图像时提供 imagePullPolicy??
    • 您必须在您的 K8s 清单中进行设置。它超出了 Dockerfile 的范围。
    • 看来你没有明白我的意思。当我在设置 eval $(minikube docker-env) 后尝试构建图像时,我的构建失败。当我在不设置 eval $(minikube docker-env) 的情况下使用并且 k8s 的 yaml 的 imagepullpolicy 为 IfNotPresent 时,它给出了我在原始问题中提出的错误。一旦我在没有设置 eval $(minikube docker-env) docker build -o - 的情况下进行如下构建,这个问题就得到了解决。 > myImage.tar 然后在 minikube 终端中加载 tar 文件作为 docker load -i myImage.tar 在这一切工作之后。所以我是除此之外的任何其他方式
    猜你喜欢
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 2020-10-06
    • 2017-09-15
    • 1970-01-01
    • 2020-01-08
    • 2017-10-20
    相关资源
    最近更新 更多