Kubectl创建部署无法从本地docker repo连接中提取图像被拒绝

时间:2020-08-10 03:53:04

标签: docker kubernetes kubectl docker-registry

我遇到一个非常基本的错误:

  1. 我在Windows 10计算机上安装了docker-desktop和minikube。
  2. 我还使用步骤here设置了本地Docker注册表。 这是我运行docker-ps时所拥有的:
c:\>docker ps
CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS              PORTS                                                                                                      NAMES
6675d2c57a74        registry:2                            "/entrypoint.sh /etc…"   7 hours ago         Up 2 hours          0.0.0.0:5000->5000/tcp                                                                                     registry
d05edc8f05b0        gcr.io/k8s-minikube/kicbase:v0.0.10   "/usr/local/bin/entr…"   8 hours ago         Up 8 hours          127.0.0.1:32771->22/tcp, 127.0.0.1:32770->2376/tcp, 127.0.0.1:32769->5000/tcp, 127.0.0.1:32768->8443/tcp   minikube
  1. 我使用docker push将本地映像推送到了本地注册表,并使用docker image remove命令删除了本地映像,以免造成任何混乱。
  2. 我现在尝试拉本地注册表映像,以查看它是否有效
    docker pull localhost:5000/dev/my-web:v1

    v1: Pulling from dev/my-web
    Digest: sha256:b3a0cf5c66ade8d39709c0cbbd0e08c9cc5f5e1c97f039a2bd1afed657dc8b74
    Status: Downloaded newer image for localhost:5000/dev/my-web:v1
    localhost:5000/dev/my-web:v1

现在,我运行kubectl create命令,它们失败,并显示错误connection refused

C:\>kubectl create deployment myweb --image=localhost:5000/dev/my-web:v1
deployment.apps/myweb created

C:\>kubectl get pods
NAME                        READY   STATUS         RESTARTS   AGE
myweb-7d467f4bc4-r9xhc   0/1     ErrImagePull   0          12s


C:\>kubectl describe pod/myweb-7d467f4bc4-r9xhc
Name:         myweb-7d467f4bc4-r9xhc
Namespace:    default
Priority:     0
Node:         minikube/172.17.0.3
Start Time:   Sun, 09 Aug 2020 23:30:07 -0400
Labels:       app=myweb
              pod-template-hash=7d467f4bc4
Annotations:  <none>
Status:       Pending
IP:           172.18.0.3
IPs:
  IP:           172.18.0.3
Controlled By:  ReplicaSet/myweb-7d467f4bc4
Containers:
  my-web:
    Container ID:
    Image:          localhost:5000/dev/my-web:v1
    Image ID:
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ImagePullBackOff
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-nr7vj (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  default-token-nr7vj:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-nr7vj
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  93s                default-scheduler  Successfully assigned default/myweb-7d467f4bc4-r9xhc to minikube
  Normal   Pulling    53s (x3 over 92s)  kubelet, minikube  Pulling image "localhost:5000/dev/my-web:v1"
  Warning  Failed     53s (x3 over 92s)  kubelet, minikube  Failed to pull image "localhost:5000/dev/my-web:v1": rpc error: code = Unknown desc = Error response from daemon: Get http://localhost:5000/v2/: dial tcp 127.0.0.1:5000: connect: connection refused
  Warning  Failed     53s (x3 over 92s)  kubelet, minikube  Error: ErrImagePull
  Normal   BackOff    13s (x5 over 91s)  kubelet, minikube  Back-off pulling image "localhost:5000/dev/my-web:v1"
  Warning  Failed     13s (x5 over 91s)  kubelet, minikube  Error: ImagePullBackOff
  

当我尝试通过kubectl命令而不是docker pull命令时,我无法弄清楚为什么出现连接被拒绝错误。

请帮助。

其他说明:(1)我正在使用内置的Windows虚拟机管理程序(2)使用默认网络

1 个答案:

答案 0 :(得分:1)

好吧,Kubernetes找不到您的注册表。这取决于您的设置,但是适用于Windows的Docker在VM中运行,并且您未指定如何运行minikube,但很可能在另一VM中运行。因此,根据您的设置方式,这里可能有两个VM,每个VM可以或不能互相通信。

localhost几乎永远不会与Kubernetes一起使用,因为在拉取映像时,它总是解析为Kubernetes节点的本地IP。这意味着您将必须具有注册表和kubelet在完全相同的VM上提取映像。

我只专注于使其与运行注册表的VM IP地址一起使用,并确保Kubernetes VM可以到达注册表VM IP地址。另外,请记住,在运行注册表时,在这种情况下,您还必须公开容器端口5000

P.S。您没有指定要运行的虚拟机监控程序? VirtualBox? VMware?您在使用桥接网络吗?仅限主机❓

✌️<​​/ p>

相关问题