首页 > 解决方案 > 无法从不安全的私有注册表中将图像拉入 minikube - http:服务器向 HTTPS 客户端提供 HTTP 响应

问题描述

在 Ubuntu 18 上,我按照这些说明安装了 Docker (19.03.12)

然后经历了这些步骤

并使用它设置一个私有 docker 注册表

docker run -d -p 5000:5000 -e REGISTRY_DELETE_ENABLED=true --restart=always --name registry registry:2  

我也将此添加到daemon.json文件中

{ "insecure-registries" : ["my.registrydomain.lan:5000"] }

并重新启动 docker 守护进程

sudo /etc/init.d/docker restart

我检查docker info以确保应用了不安全注册表的设置,我在最后看到了这个,所以看起来没问题

 Insecure Registries:
  my.registrydomain.lan:5000
  127.0.0.0/8

在同一台机器上,我用这个命令启动 minikube (1.12.3)

minikube start --driver=docker --memory=3000 --insecure-registry=my.registrydomain.lan:5000

所以一切都运行良好,我继续应用我的部署,kubectl除非当我到达需要从本地注册表中提取容器的 pod 时,我得到一个ErrImagePull状态。这是我的部署的一部分

spec:
  containers:
  - name: my-container
    image: my.registrydomain.lan:5000/name:1.0.0.9
    imagePullPolicy: IfNotPresent

当我描述使用失败的吊舱时

kubectl describe pod mypod-8474577f6f-bpmp2

我看到这条消息

无法提取图像“my.registrydomain.lan:5000/name:1.0.0.9”:rpc 错误:代码 = 未知 desc = 来自守护进程的错误响应:获取 https://my.registrydomain.lan:5000/v2/:http : 服务器给 HTTPS 客户端的 HTTP 响应

编辑:我忘了提到我可以通过 http 将我的图像推送到注册表中,而不会出现任何问题(机器是 Windows 10,我在守护进程配置中设置了不安全的注册表选项)

标签: dockerkubernetesminikube

解决方案


我尝试使用您提供的完全相同的设置重现您的问题,并且效果很好。图像被拉出没有任何问题。我用我的 debian 9 和全新的 ubuntu 安装测试了这个设置:

minikube    version:    v1.12.3
docker      version:    v19.03.12
k8s         version:    v1.18.3 
ubuntu      version:    v18 

我所做的问题中没有描述的是在 minikube 容器主机文件中放置一个条目:

root@minikube:/# cat /etc/hosts
...
10.128.5.6 my.registrydomain.lan
...

以及标签/推送命令:

docker tag 4e2eef94cd6b my.registrydomain.lan:5000/name:1.0.0.9
docker push my.registrydomain.lan:5000/name:1.0.0.9

这是 pod 中的描述:

  Normal   Pulling    8m19s (x5 over 10m)     kubelet, minikube  Pulling image "my.registrydomain.lan:5000/name:1.0.0.9"

正如评论中所建议的那样,您可能想要检查这个github案例。它通过几个解决您的问题的方法:

如果您将存储库托管在另一个节点上,首先是检查您的主机文件并正确更新它。第二种解决方案与将图像推送到存储库有关,这使用户认为命令insecure-registriesdocker push命令都区分大小写。第三个是使用systemd来控制docker daemon。

最后,如果这些都没有帮助,我会尝试清除所有设置,卸载 docker,清除 docker 配置并从头开始。


推荐阅读