Docker 无法将映像从不安全的私有注册表拉入minikube-http:服务器向HTTPS客户端提供了http响应

Docker 无法将映像从不安全的私有注册表拉入minikube-http:服务器向HTTPS客户端提供了http响应,docker,kubernetes,minikube,Docker,Kubernetes,Minikube,在Ubuntu18上,我按照这些说明安装了Docker(19.03.12) 然后经过这些步骤 以非根用户身份管理docker 使用systemd启动 并使用此设置私人docker注册表 docker run -d -p 5000:5000 -e REGISTRY_DELETE_ENABLED=true --restart=always --name registry registry:2 我还将其添加到daemon.json文件中 { "insecure-reg

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

然后经过这些步骤

  • 以非根用户身份管理docker

  • 使用
    systemd启动
    

并使用此设置私人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
当我描述使用失败的pod时

kubectl describe pod mypod-8474577f6f-bpmp2
我看到了这个消息

无法提取映像“my.registrydomain.lan:5000/name:1.0.0.9”:rpc 错误:code=Unknown desc=来自守护进程的错误响应:Get :http:server给了http 对HTTPS客户端的响应


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

我尝试使用与您提供的设置完全相同的设置重现您的问题,效果很好。图像被拉出来没有任何问题。我用我的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"

正如评论中所建议的,您可能需要检查此案例。它涉及到您的问题的两种解决方案:

如果您在另一个节点上托管存储库,则检查主机文件并正确更新它。解决方案与将图像推入存储库有关,该存储库为用户提供了
不安全注册表
docker push
命令区分大小写的功能。一种是使用systemd来控制docker守护进程


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

我尝试使用与您提供的设置完全相同的设置重现您的问题,效果很好。图像被拉出来没有任何问题。我用我的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"

正如评论中所建议的,您可能需要检查此案例。它涉及到您的问题的两种解决方案:

如果您在另一个节点上托管存储库,则检查主机文件并正确更新它。解决方案与将图像推入存储库有关,该存储库为用户提供了
不安全注册表
docker push
命令区分大小写的功能。一种是使用systemd来控制docker守护进程


最后,如果这些都不起作用,我将尝试清除所有设置,卸载docker,清除docker配置,然后从头开始。

查看相关内容查看相关内容在卸载并重新安装所有内容后,我再次尝试,但仍然不起作用,因此我尝试了您引用的第三个步骤,但出现了一个错误(代码=退出,状态=1/失败)这只是启用不安全注册表的另一种方法,但我验证了它是使用daemon.json添加的。我也可以像以前一样从Windows计算机上的不安全客户端推送,只是从minikube推送,我无法拉。可能是minikube的问题?卸载并重新安装所有内容后,我再次尝试,但仍然无法工作我尝试了您引用的第三个步骤,但我得到了一个错误(code=exited,status=1/FAILURE),这只是启用不安全注册表的另一种方法,但我验证了它是使用daemon.json添加的。我也可以像以前一样从Windows机器上的不安全客户端推送,只是从minikube推送,我无法拉。可能是minikube的问题?