gpt4 book ai didi

docker - 为什么我在此 Kubernetes 部署中收到 ErrImagePull 错误?

转载 作者:IT老高 更新时间:2023-10-28 12:38:19 27 4
gpt4 key购买 nike

我正在尝试使用 Minikube、Docker Registry 和演示节点项目创建本地 Kubernetes 部署。

我做的第一件事是安装 Docker v1.12.3,然后是 Minikube v0.12.2。

然后我通过运行这个命令创建了一个 Docker Registry 容器(通过 this tutorial ,只运行下面的第一个命令)

docker run -d -p 5000:5000 --name registry registry:2

接下来我运行这个 minikube 命令来创建本地 kubernetes 集群:

minikube start --vm-driver="virtualbox" --insecure-registry="0.0.0.0:5000"

我的项目结构如下:

.
├── Dockerfile
└── server.js

我的 Dockerfile 看起来像这样:

FROM node:7.1.0
EXPOSE 8080
COPY server.js .
CMD node server.js

然后我构建了自己的 docker 镜像并将其推送到我的私有(private)存储库:

docker build -t hello-node .
docker tag hello-node localhost:5000/hello-node
docker push localhost:5000/hello-node

然后我尝试使用以下命令运行部署:

kubectl run hello-node --image=localhost:5000/hello-node --port=8888

但后来我明白了:

sudo kubectl get pods --all-namespaces                                                                                                                             
NAMESPACE NAME READY STATUS RESTARTS AGE
default hello-node-3745105022-gzs5a 0/1 ErrImagePull 0 11m
kube-system kube-addon-manager-minikube 1/1 Running 4 10d
kube-system kube-dns-v20-2x64k 3/3 Running 12 10d
kube-system kubernetes-dashboard-mjpjv 1/1 Running 4 10d

我想我可能缺少某种 docker 注册表身份验证,但是当我在谷歌上搜索时,我找不到我理解的东西。有人可以指出我正确的方向吗?

编辑

使用 ssh 访问 kubernetes VM 上的 bash 并使用以下命令从我的私有(private)注册表中提取 hello-node 镜像后:

minikube ssh
Boot2Docker version 1.11.1, build master : 901340f - Fri Jul 1
22:52:19 UTC 2016
Docker version 1.11.1, build 5604cbe
docker@minikube:~$ sudo docker pull localhost:5000/hello-node
Using default tag: latest
Pulling repository localhost:5000/hello-node
Error while pulling image: Get http://localhost:5000/v1/repositories/hello-node/images: dial tcp 127.0.0.1:5000: getsockopt: connection refused

localhost:5000 是在 kubernetes 主机 VM 中使用的正确地址吗?

最佳答案

看起来您正在主机上运行注册表。实际上,您需要在 VM 内运行注册表。您可以通过首先运行此命令将 docker 客户端指向 minikube VM 内的 docker 守护进程
评估 $(minikube docker-env)
在你的外壳里。

然后,您可以在主机上运行 docker build 命令,但它会在 VM 内构建。

事实上,如果您的目标是简单地运行本地版本的镜像,您应该运行 eval $(minikube docker-env) 以指向 VM 中的 docker 守护进程,并且在你的 pod YAML 中设置 imagePullPolicy: IfNotPresent。然后,kubernetes 将使用本地构建的镜像(如果可用)。

关于docker - 为什么我在此 Kubernetes 部署中收到 ErrImagePull 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40600419/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com