【问题标题】:Kubernetes fails to run a docker image build locallyKubernetes 无法在本地运行 docker 镜像构建
【发布时间】:2018-09-28 15:02:16
【问题描述】:

我正在尝试运行我使用 Kubernetes 在本地构建的 docker 映像。

这是我的命令行:

kubectl run myImage --image=myImage --port 3030 --image-pull-policy=IfNotPresent

我看到很多人说我们需要添加 --image-pull-policy=IfNotPresent 标志,以便 Kubernetes 可以在本地而不是 Docker Hub 中查找映像,但我仍然收到此错误(来自 Pod 上的 Minikube 仪表板、服务和部署)。

无法拉取图像“myImage”:rpc 错误:代码 = 未知 desc = 来自守护进程的错误响应:myImage 的拉取访问被拒绝,存储库不存在或可能需要“docker login”

但是这里好像还有一个问题,我也试过--image-pull-policy=Never,还是不行。

有什么想法吗?

【问题讨论】:

    标签: kubernetes minikube


    【解决方案1】:

    imageminikube 中不可用。

    Minikube 使用单独的docker daemon。这就是为什么,即使图像存在于你的机器中,它仍然在 minikube 中丢失。

    首先,将图片发送到minikube,

    docker save myImage | (eval $(minikube docker-env) && docker load)
    

    此命令会将图像保存为 tar 存档,然后自行将图像加载到 minikube 中。

    接下来,在您的部署中使用该映像,并将 image-pull-policy 设置为 IfNotPresent

    kubectl run myImage --image=myImage --port 3030 --image-pull-policy=IfNotPresent
    

    【讨论】:

    • 在正常的 kubernetes 集群上会发生什么?如何找到我的集群使用的 docker 守护进程?
    • @AvikAggarwal,kubernetes 集群的每个节点都有一个 docker 守护进程在运行。
    • 请告诉 Windows 用户应该怎么做,因为 eval 在 Windows 中不起作用
    • @SherryJain,你能试试这个答案,看看它是否有效? stackoverflow.com/a/61098992/4628962
    【解决方案2】:

    您在 docker 中创建的镜像在 Minikube 中不可用,因为 Minikube 有自己的 docker 守护进程,它会检查那里的 docker 镜像和 DockerHub。

    按照以下步骤访问 Minikube Docker 守护进程,构建和部署 docker 镜像:

    1. 使用 minikube docker-env command 输出将本地 Docker 守护进程指向 minikube 内部 Docker 注册表所需的环境变量。

    minikube docker-env 导出 DOCKER_TLS_VERIFY=”1” 导出 DOCKER_HOST="tcp://172.17.0.2:2376" 导出 DOCKER_CERT_PATH="/home/user/.minikube/certs" 导出 MINIKUBE_ACTIVE_DOCKERD=”minikube”

    #要将你的 shell 指向 minikube 的 docker-daemon,# run: eval $(minikube -p minikube docker-env)

    1. 要应用这些变量,

      eval $(minikube -p minikube docker-env)

    2. 现在需要再次构建映像,以便将其安装在 minikube 注册表中,而不是本地注册表:

      码头工人建造。 -t forketyfork/hello-world

    forketyfork/hello-world 是 docker 镜像的名称。

    1. 通过yamlconfiguartion file.将镜像部署到kubernetes或者Minkube

      kubectl create -f helloworld.yml

    helloworld.yml 是 yml/yaml 文件的名称。

    1. 现在kubectl get pods 获取 pod 的状态

    更多参考,https://medium.com/swlh/how-to-run-locally-built-docker-images-in-kubernetes-b28fbc32cc1d

    【讨论】:

      猜你喜欢
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 2017-09-15
      • 2021-09-03
      • 2020-01-08
      • 1970-01-01
      • 2018-12-03
      相关资源
      最近更新 更多