当前位置: 首页 > 知识库问答 >
问题:

适用于Mac的Docker-Kubernetes-参考本地映像

萧懿轩
2023-03-14

我正在使用支持 Kubernetes 的 Mac Docker,并且我正在努力创建一个引用本地构建的映像的 Kubernetes 部署。

输出docker镜像

REPOSITORY  TAG     IMAGE 
test        latest  2c3bdb36a5ed

这是我的部署。yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloworld-deployment
spec:
  selector:
    matchLabels:
      app: helloworld
  replicas: 1
  template:
    metadata:
      labels:
        app: helloworld
    spec:
      containers:
      - name: aaa
        image: test:latest
        ports:
        - containerPort: 8080

当我运行<code>时,kubectl应用-f解聚剂。yamlpod已创建,但:

helloworld-deployment-764b8b85d8-2c4kl   0/1       ImagePullBackOff   0          
helloworld-deployment-764b8b85d8-rzq7l   0/1       ImagePullBackOff   0

库贝特描述其中一个豆荚给出了:

  Normal   Scheduled              20s               default-scheduler            Successfully assigned helloworld-deployment-79f66d97c6-7tj2x to docker-for-desktop
  Normal   SuccessfulMountVolume  19s               kubelet, docker-for-desktop  MountVolume.SetUp succeeded for volume "default-token-72f44"
  Normal   BackOff                16s               kubelet, docker-for-desktop  Back-off pulling image "test:latest"
  Warning  Failed                 16s               kubelet, docker-for-desktop  Error: ImagePullBackOff
  Normal   Pulling                4s (x2 over 19s)  kubelet, docker-for-desktop  pulling image "test:latest"
  Warning  Failed                 2s (x2 over 17s)  kubelet, docker-for-desktop  Failed to pull image "test:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for test, repository does not exist or may require 'docker login'
  Warning  Failed                 2s (x2 over 17s)  kubelet, docker-for-desktop  Error: ErrImagePull

有趣的是,如果我尝试运行一些托管在dockerhub上的图像,那么一切都很好,我还尝试使用skaffold,它也像一个魅力一样工作……

我看到了一些关于minikube的类似问题,解决方案是使用minikube docker守护进程来构建图像,以便它们可以从库伯内特斯集群中引用。

我想避免设置本地回购,那么我如何让它与Docker的Kubernetes一起工作?

共有3个答案

家志学
2023-03-14

除了techtrainer的评论和回答,我想提供一些如何做到这一点的例子。

一般规则。您必须使用图像的标记版本,而不是< code >最新。有了Docker标签,你能得到的越具体越好。具体一点,避免使用错误的图像。如果你不想让你的同事或其他Docker用户下载图片,并且不知道它们有多新,请考虑这一点。变得具体以避免这样的问题。

docker tag IMAGE ID image/TAG:version.d.m.y

为了更好地管理您的图像,您应该有一些明智的命名约定。我更喜欢使用图像的创建阶段、版本和日期。例如:

docker tag 113a43faa138 ubuntu/prod:v1.8.6.2018

它表示制作阶段,版本1,创建于2018年6月8日。

仅此而已。您的版本可用,并且命名对您和此图像的其他用户来说更容易理解。

谭建章
2023-03-14

使用标记版本的映像而不是最新版本的映像,因为如果您要将Docker映像传送到正式生产环境,您应该忽略最新的标记。不要使用它。不要被它所诱惑。很容易看到它,并认为您的部署脚本应该只拉取“最新”,您的构建过程将确保这是有效的。

丁昌翰
2023-03-14

我可以通过将< code > imagepulpolicy 设置为< code>Never来运行本地映像。

例如:

apiVersion: v1
kind: Pod
metadata:
  name: local-image-test
spec:
  containers:
  - name: local-image-container
    image: local-image:latest
    imagePullPolicy: Never

(本解决方案归功于https://github . com/kubernetes/kubernetes/issues/1293 # issue comment-357326426)

 类似资料:
  • 我在Linode上有一个K8s集群和另一个用于操作的VM。 我已经安装了Docker 注意:我还没有在这个虚拟机上安装迷你库贝。 我可以构建我的映像,但无法将其从本地注册表拉到k8s pod。 以下是我已经做过的事情 创建docker镜像并将其推送到本地注册表 从图像中运行docker容器,但不会在K8s中被拉入 创建“regcred”secret并在部署yaml中使用它 创建映像并使用VM的IP

  • 我尝试使用minikube从本地docker镜像和docker hub部署kubernetes。但两者都不起作用。 方法1:使用保存和加载tar文件,创建了图像,它可用于kubectl。 执行以下命令以创建部署: 从kubectl描述pod命令, 方法2:我将映像推送到我的docker hub存储库(https://hub.docker.com/r/get2arun/elk/tags),然后在终端

  • 我有以下文件夹结构: 这里,我的是: 当我运行时,我希望有两个输出图像,一个用于,一个用于。 我使用(仅与版本2的语法兼容)。

  • 我有慢的互联网连接,但我已经有我需要的docker映像。: 或使用通用的: 但结果是错误的: 如何优化testcontainers以使用本地映像?

  • 问题内容: 我在机器上安装了docker,并且在其中安装了docker的minikube上,所以可能我有两个在不同VM上运行的docker实例 我建立一个图像并对其进行标记,然后将其推入本地注册表,并成功将其推入,我也可以从注册表中将其拉出,也可以在运行curl以获取标签列表时得到结果,这就是我所做的 以上所有步骤均正常进行,没有任何问题。 我的问题是当我运行minikube并尝试在其中的本地注册

  • 所以我使用这种方法写入文件,它在windows上运行完全正常,但在mac上运行时,它会创建文件,但它们是空的。 我知道数据是正确的,因为它打印正确。感谢您的任何帮助,这真的让我绊倒了。