【问题标题】:Kubernetes on Docker Desktop does not recognize local imagesDocker Desktop 上的 Kubernetes 无法识别本地镜像
【发布时间】:2021-09-03 15:35:05
【问题描述】:

我正在尝试在以下软件堆栈上部署 Windows 容器映像

Windows 10 Pro + Docker Desktop + Embedded Kubernetes in docker desktop

由于某种原因,'embedded kubernetes' 无法识别 'local images',无论设置了什么 --image-pull-policy

Docker 镜像

PS C:\WINDOWS\system32> docker images
REPOSITORY                             TAG        IMAGE ID       CREATED        SIZE
myimg                                  final      90c09acbfc59   15 hours ago   5.45GB

Kubectl 运行

PS C:\WINDOWS\system32> kubectl run --image=myimg:final tskuberun

Pod 输出

Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  25s                default-scheduler  Successfully assigned default/tskuberun to docker-desktop
  Normal   BackOff    23s (x2 over 24s)  kubelet            Back-off pulling image "myimg:final"
  Warning  Failed     23s (x2 over 24s)  kubelet            Error: ImagePullBackOff
  Normal   Pulling    9s (x2 over 25s)   kubelet            Pulling image "myimg:final"
  Warning  Failed     8s (x2 over 25s)   kubelet            Failed to pull image "myimg:final": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 192.168.65.5:53: no such host
  Warning  Failed     8s (x2 over 25s)   kubelet            Error: ErrImagePull

但是,当我执行 docker run 时,它会拉取本地映像。以下按预期工作

PS C:\WINDOWS\system32> docker run myimg:final

我搜索了答案,但大多数链接都与 Unix 风格和 Minikube 相关。

只有少数链接与Docker desktop + embedded kubernetes 相关,但遗憾的是没有解决问题

我正在努力摆脱这个问题。非常感谢任何帮助

编辑

在进一步调查中,我发现'Docker desktop' 指的是本地图像,以防我选择选项"Switch to Linux Containers"

Kubectl 运行 Linux 镜像

PS C:\WINDOWS\system32> kubectl run --image=wphp --image-pull-policy=IfNotPresent lntest


PS C:\WINDOWS\system32> kubectl describe pod/lntest

Events:
  Type     Reason     Age               From               Message
  ----     ------     ----              ----               -------
  Normal   Scheduled  40s               default-scheduler  Successfully assigned default/lntest to docker-desktop
  Normal   Pulled     2s (x4 over 39s)  kubelet            Container image "wphp" already present on machine
  Normal   Created    2s (x4 over 39s)  kubelet            Created container lntest
  Normal   Started    2s (x4 over 39s)  kubelet            Started container lntest

这个问题似乎只发生在“Windows 容器”上,即如果我选择了选项 'Switch to Windows Containers',Docker 桌面不会引用本地图像

【问题讨论】:

    标签: docker kubernetes docker-desktop


    【解决方案1】:

    尽管imagePullPolicy: never 应该可以为您解决问题,但可能存在一些与证书相关的问题。

    由于这些问题,我个人避免使用本地构建的 Docker 映像。

    您可以尝试将 docker push 集成到您的工作流程中的 docker hub 或在您的 kubernetes 集群中构建一个 docker 注册表,例如使用https://www.linuxtechi.com/setup-private-docker-registry-kubernetes/

    【讨论】:

    • 感谢您的回答。我编辑了我的帖子,而且您提供的链接似乎是针对 linux 而我在 Windows 上工作
    • 你是对的,不管你的操作系统如何,Kubernetes 资源都应该可以工作。您只需要找到一种使用 Windows 生成自签名证书的方法
    • imagePullPolicy: IfNotPresent 在使用 Docker Desktop + 嵌入式 Kubernetes 测试本地开发的镜像时也很好
    【解决方案2】:

    Docker Desktop 使用的虚拟机无法访问互联网。你必须理清这个网络。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-01
      • 2018-09-28
      • 2016-08-20
      • 2018-02-14
      • 1970-01-01
      • 2018-11-17
      • 2023-03-18
      • 2020-11-02
      相关资源
      最近更新 更多