docker - 无法从不安全的私有注册表中将图像拉入 minikube - http:服务器向 HTTPS 客户端提供 HTTP 响应
问题描述
在 Ubuntu 18 上,我按照这些说明安装了 Docker (19.03.12)
然后经历了这些步骤
以非 root 用户身份管理 docker https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user
使用https://docs.docker.com/engine/install/linux-postinstall/#configure-docker-to-start-on-boot启动启动
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
当我描述使用失败的吊舱时
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,我在守护进程配置中设置了不安全的注册表选项)
解决方案
我尝试使用您提供的完全相同的设置重现您的问题,并且效果很好。图像被拉出没有任何问题。我用我的 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-registries
和docker push
命令都区分大小写。第三个是使用systemd来控制docker daemon。
最后,如果这些都没有帮助,我会尝试清除所有设置,卸载 docker,清除 docker 配置并从头开始。
推荐阅读
- php - 正则表达式:如何捕获以匹配字符集开头的组
- .htaccess - 301 到无扩展页面,仅当它存在时
- c - 从自定义信号处理程序调用原始信号处理程序
- powershell - 如何在哈希列表中检查?
- python - Plotting tendency line in Python
- c++ - 你能帮我确定这里使用的是哪个迭代器吗?
- youtube-livestreaming-api - Youtube LiveChat API:messageTextInvalid
- react-native - 如何将参数传递给反应导航v4(React Native)中下一个屏幕的标题?
- python - 如何对熊猫数据框执行滑动窗口操作?
- c++11 - 二维数组和指向二维数组的指针