繁体   English   中英

Minikube不会从本地Docker容器注册表中提取图像

[英]Minikube not pull image from local docker container registry

我正在尝试将容器部署到本地kubernetes,现在我已经安装了docker deamon,minikube和minikube仪表板。 这一切都很好。 我还在端口5000上设置了本地容器存储库。我还推送了2个应用程序映像。 我可以在浏览器http:// localhost:5000 / v2 / _catalog上看到它们

现在,当我尝试使用minikube上吊舱时。

kubectl apply -f ./docker-compose-k.yml --record

我在这样的仪表板上收到错误:

Failed to pull image "localhost:5000/coremvc2": rpc error: code = Unknown desc = Error response from daemon: Get http://localhost:5000/v2/: dial tcp 127.0.0.1:5000: connect: connection refused 

这是我的撰写文件:-

apiVersion: apps/v1
kind: Deployment
metadata:
  name: core23
  labels:
    app: codemvc
spec:
  replicas: 1
  selector:
    matchLabels:
      app: coremvc
  template:
    metadata:
      labels:
        app: coremvc
    spec:
      containers:
      - name: coremvc
        image: localhost:5000/coremvc2
        ports:
        - containerPort: 80
        imagePullPolicy: Always

我不知道为什么由于docker deamon和kubernetes都在同一台机器上而没有拉这个图像。 我也尝试过使用dockerhub映像进行此操作,并且工作正常,但是我想使用本地映像进行此操作。 请给我提示或任何指导。

谢谢,

根据注释,您使用minikube start (未指定驱动程序) minikube startminikube start

这意味着minikube在Virtualbox VM内运行。 为了使您的用例起作用,您有两种选择:

  1. 困难的方法设置VM与主机之间的连接并使用主机IP
  2. 简单的方法使用minikube ssh连接到您的VM并在其中安装注册表。 然后,您的部署应使用VM的IP。

如果不想使用“虚拟”框,则应阅读有关其他现有驱动程序以及如何使用它们的文档

希望这可以帮助 !

localhost:5000指向容器本身。

如果Docker注册表在运行minikube的同一主机上运行:

  • 获取主机的IP地址(例如,使用ifconfig )。 说,它是10.0.2.15

  • 标记图像:

     docker tag coremvc2:latest 10.0.2.15:5000/coremvc2:latest 
  • 将带有标签的图像推送到本地注册表:

     docker push 10.0.2.15:5000/coremvc2:latest 
  • 部署中的更改:

     image: localhost:5000/coremvc2 

     image: 10.0.2.15:5000/coremvc2:latest 

编辑:如果出现“ ... http:服务器向HTTPS客户端提供HTTP响应”错误,则可以通过编辑/etc/docker/daemon.json将本地Docker注册表配置为本地Docker守护程序的不安全注册表 (如果创建的话,请创建它不存在):

{ 
... any other settings or remove this line ...
  "insecure-registries": ["10.0.2.15:5000"] 
}

...然后重启docker:

 sudo service docker restart

不确定如何运行本地Docker注册表,但这是一种方法:

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

问题是您在主机上设置了docker注册表,并且minikube在虚拟化环境中运行(根据您的示例为Virtualbox)。

这就是为什么在尝试在端口5000上获取映像时收到“连接被拒绝”错误的原因。根本原因是,没有进程在“内部” minikube上侦听5000。您的注册表被部署在minikube的“外部”。

正如Marc所说,有两种方法可以修复ita,而我已复制了这两种方法。 艰苦的方法会让您:

Failed to pull image "10.150.0.4:5000/my-alpine": rpc error: code = Unknown desc = Error response from daemon: Get https://10.150.0.4:5000/v2/: http: server gave HTTP response to HTTPS client

因此,您必须根据Docker文档设置安全的Docker注册表

简单的方法是将其设置在您的minikube之上。

my@linux-vm2:~$ minikube ssh
$ docker run -d -p 5000:5000 --restart=always --name registry registry:2
...
Status: Downloaded newer image for registry:2

$ docker pull nginx:latest
...
Status: Downloaded newer image for nginx:latest

$ docker tag alpine:latest localhost:5000/my-nginx
$ docker push localhost:5000/my-nginx
$ logout

my@linux-vm2:~$ kubectl apply -f ./docker-compose-k.yml --record
deployment.apps/core23 created


my@linux-vm2:~$ kubectl get  pods
NAME                     READY   STATUS    RESTARTS   AGE
core23-b44b794cb-vmhwl   1/1     Running   0          4s

my @linux-vm2:~$ kubectl describe pods
...
Events:
  Type    Reason     Age        From               Message
  ----    ------     ----       ----               -------
  Normal  Scheduled  <unknown>  default-scheduler  Successfully assigned default/core23-b44b794cb-vmhwl to minikube
  Normal  Pulling    9s         kubelet, minikube  Pulling image "localhost:5000/my-nginx"
  Normal  Pulled     9s         kubelet, minikube  Successfully pulled image "localhost:5000/my-nginx"
  Normal  Created    9s         kubelet, minikube  Created container coremvc
  Normal  Started    9s         kubelet, minikube  Started container coremvc

请注意,在此示例中,我一直在使用nginx而不是coremvc2 (但步骤仍然相同)。

综上所述,可以通过几种不同的方式来获得所需的结果。 请尝试,让我们知道它的进展。 干杯:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM