docker - 无法从不安全的私有(private)注册表中将图像拉入 minikube - http : server gave HTTP response to HTTPS client

标签 docker kubernetes minikube

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

然后经历了这些步骤

并使用它设置一个私有(private)的 docker registry

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

我看到了这条消息

Failed to pull image "my.registrydomain.lan:5000/name:1.0.0.9": rpc error: code = Unknown desc = Error response from daemon: Get https://my.registrydomain.lan:5000/v2/: http: server gave HTTP response to HTTPS client

编辑:我忘了提到我能够通过 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"

正如评论中所建议的,您可能需要查看此 github案件。它通过您的问题的几个解决方案:

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

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

关于docker - 无法从不安全的私有(private)注册表中将图像拉入 minikube - http : server gave HTTP response to HTTPS client,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63911296/

相关文章:

windows - Windows 上的 Docker (Boot2Docker) - 证书由未知权限错误签名

docker - 如何确保每个Docker Swarm节点上至少运行一项服务

go - 我有一个在 Kubernetes 上运行的 Golang 应用程序,但是当 pod 死亡时根本没有错误消息。我应该怎么办?

docker - 为什么我在运行在不同节点但在 pod 中的容器中获得不同的 ip

kubernetes - 在 Linux Mint : issue with minikube credentials 中运行的 Virtualbox

kubernetes - 在 statefulset pod 中使用本地持久卷时出错

kubernetes - 芭蕾舞女 Actor “undefined package ”与Visual Code中的kubernetes

docker - 在同一主机上的不同网络中的 Docker 容器之间进行通信

docker - 在GCE中使用docker-machine时“error validating certificates”

ubuntu - 尝试使用 minikube 运行 kubectl get pods 时无法读取客户端证书和客户端 key