(Kubernetes Minikube)无法从本地注册表获取docker镜像

我在我的机器上设置了docker,还有minikube,里面有docker,所以我可能在不同的VM上运行了两个docker实例

我构建一个图像并标记它,然后将其推送到本地注册表,它成功推送,我也可以从注册表中拉出它也是当我运行curl得到标签列表我得到结果,这是我做的

1- docker build -t 127.0.0.1:5000/eliza/console:0.0.1 .
2- docker run -d -p 5000:5000 --name registry registry:2
3- docker tag a3703d02a199 127.0.0.1:5000/eliza/console:0.0.1
4- docker push 127.0.0.1:5000/eliza/console:0.0.1
5- curl -X GET http://127.0.0.1:5000/v2/eliza/console/tags/list

以上所有步骤都运行正常,没有任何问题.

我的问题是当我运行minikube并尝试在其中的本地注册表中访问此图像

所以,当我运行下一个命令

1- sudo minikube start --insecure-registry 127.0.0.1:5000
2- eval $(minikube docker-env)
3- minikube ssh
4- curl -X GET http://127.0.0.1:5000/v2/eliza/console/tags/list

在最后一步(第4点),它给了我下一条消息

curl: (7) Failed to connect to 127.0.0.1 port 5000: Connection refused

所以我可以从我的机器访问图像注册表,但不能从minikube访问,当我在minikube上使用Kubernetes部署这个图像并且由于无法连接到http://127.0.0.1:5000而导致部署失败时,我当然会遇到问题

你能帮我配置minikube来查看我的本地注册表,这样我的问题就能解决,然后我可以成功地使用kubernetes将图像部署到minikube吗?

UPDATE

我正在使用这个yaml文件(我命名为ConsolePre.yaml)来使用kubernetes部署我的图像

apiVersion: v1
  kind: Service
  Metadata:
    name: tripbru-console
    labels:
      app: tripbru-console
  spec:
    ports:
      - port: 9080
        targetPort: 9080
        nodePort: 30181
    selector:
      app: tripbru-console
      tier: frontend
    type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
Metadata:
  name: tripbru-console
  labels:
    app: tripbru-console
spec:
  strategy:
    type: Recreate
  template:
    Metadata:
      labels:
        app: tripbru-console
        tier: frontend
    spec:
      containers:
      - image: docker.local:5000/eliza/console:0.0.1
        name: tripbru-console
        ports:
        - containerPort: 9080
          name: tripbru-console

当我运行下一个命令来应用更改

sudo kubectl apply -f /PATH_TO_YAML_FILE/ConsolePre.yaml

结果是

NAME                                      READY     STATUS         RESTARTS   AGE
po/tripbru-console-1655054400-x3g87       0/1       ErrImagePull   0          1m

当我运行describe命令时

sudo kubectl describe pod tripbru-console-1655054400-x3g87

我在描述结果中找到了下一条消息

Error response from daemon: {“message”:”Get
07001: dial tcp: lookup docker.local on
10.0.2.3:53: read udp 10.0.2.15:57792->10.0.2.3:53: I/O timeout”}

我在minikube / etc / hosts中配置了docker.local xxx.xxx.xx.4,所以我不知道10.0.2.3:53和10.0.2.15:57792来自哪里.

那我怎么能解决这个问题呢.

谢谢 :)

问题是您在任何地方使用127.0.0.1的想法.这是错的.

因此,如果您的机器IP是192.168.0.101.然后下面的工作

1- docker build -t 127.0.0.1:5000/eliza/console:0.0.1 .
2- docker run -d -p 5000:5000 --name registry registry:2
3- docker tag a3703d02a199 127.0.0.1:5000/eliza/console:0.0.1
4- docker push 127.0.0.1:5000/eliza/console:0.0.1
5- curl -X GET http://127.0.0.1:5000/v2/eliza/console/tags/list

因为docker run将注册表映射到127.0.0.1:5000和192.168.0.101:5000.现在在你的机器上只有这个127.0.0.1可以工作.现在你用的时候

3- minikube ssh

你进入minikube机器并且没有在127.0.0.1:5000上运行的注册表.所以错误.使用机器机器IP在本机内无法访问注册表.

我通常解决这个问题的方法是在本地和其他VM中使用主机名.

所以在你的机器上在/ etc / hosts中创建一个条目

docker.local 127.0.0.1

并将命令更改为

1- docker build -t docker.local:5000/eliza/console:0.0.1 .
2- docker run -d -p 5000:5000 --name registry registry:2
3- docker tag a3703d02a199 docker.local:5000/eliza/console:0.0.1
4- docker push docker.local:5000/eliza/console:0.0.1
5- curl -X GET http://docker.local:5000/v2/eliza/console/tags/list

然后当你使用minikube ssh时,在/ etc / hosts中为docker.local创建一个条目

docker.local 192.168.0.101

然后curl -X GET http://docker.local:5000 / v2 / eliza / console / tags / list

编辑-1

对于TLS问题,您需要在minikube中停止docker服务

systemctl stop docker

然后编辑/etc/systemd/system/docker.service.d/10-machine.conf并进行更改

ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock –tlsverify –tlscacert /etc/docker/ca.pem –tlscert /etc/docker/server.pem –tlskey /etc/docker/server-key.pem –label provider=virtualBox –insecure-registry 10.0.0.0/24

ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock –tlsverify –tlscacert /etc/docker/ca.pem –tlscert /etc/docker/server.pem –tlskey /etc/docker/server-key.pem –label provider=virtualBox –insecure-registry 10.0.0.0/24 –insecure-registry docker.local:5000 –insecure-registry 192.168.1.4:5000

然后重新加载守护进程并启动docker服务

systemctl daemon-reload
systemctl start docker

之后试着拉

docker pull docker.local:5000/eliza/console:0.0.1

命令应该有效

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Windows注册表操作基础代码 Windows下对注册表进行操作使用的一段基础代码Reg.h:#pragmaonce#include<assert.h>#include<windows.h>classReg{HKEYhkey;public:voidopen(HKEYroot
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的内容,在Windows环境下的黑客必须熟练掌握底层API编程。为了使读者对黑客常用的Windows API有个更全面的了解以及方便日后使用API方法的查询,特将这些常用的API按照7大分类进行整理如下,希望对大家的学习有所帮助。一
一个简单的Windows Socket可复用框架说起网络编程,无非是建立连接,发送数据,接收数据,关闭连接。曾经学习网络编程的时候用Java写了一些小的聊天程序,Java对网络接口函数的封装还是很简单实用的,但是在Windows下网络编程使用的Socket就显得稍微有点繁琐。这里介绍一个自己封装的一
Windows文件操作基础代码 Windows下对文件进行操作使用的一段基础代码File.h,首先是File类定义:#pragmaonce#include<Windows.h>#include<assert.h>classFile{HANDLEhFile;//文件句柄publ
Winpcap基础代码 使用Winpcap进行网络数据的截获和发送都需要的一段代码:#include<PCAP.H>#pragmacomment(lib,"wpcap.lib")//#pragmacomment(lib,"ws2_32.lib")#
使用vbs脚本进行批量编码转换 最近需要使用SourceInsight查看分析在Linux系统下开发的项目代码,我们知道Linux系统中文本文件默认编码格式是UTF-8,而Windows中文系统中的默认编码格式是Gb2312。系统内的编码格式有所区别倒无伤大雅,关键的是SourceInsigh...
缓冲区溢出攻击缓冲区溢出(Buffer Overflow)是计算机安全领域内既经典而又古老的话题。随着计算机系统安全性的加强,传统的缓冲区溢出攻击方式可能变得不再奏效,相应的介绍缓冲区溢出原理的资料也变得“大众化”起来。其中看雪的《0day安全:软件漏洞分析技术》一书将缓冲区溢出攻击的原理阐述得简洁
Windows字符集的统一与转换一、字符集的历史渊源在Windows编程时经常会遇到编码转换的问题,一直以来让刚接触的人摸不着头脑。其实只要弄清Win32程序使用的字符编码方式就清楚了,图1展示了一个Win32控制台项目的属性中的字符集选项。这里有两个不同的字符集:一个是Unicode字符集,另一个
远程线程注入引出的问题一、远程线程注入基本原理远程线程注入——相信对Windows底层编程和系统安全熟悉的人并不陌生,其主要核心在于一个Windows API函数CreateRemoteThread,通过它可以在另外一个进程中注入一个线程并执行。在提供便利的同时,正是因为如此,使得系统内部出现了安全
windows系统启动项怎么打开
win10系统文件夹的只读属性去不掉怎么办
windows.old可以删掉吗?
windows的网络功能主要通过什么来实现?
win10系统以太网不见了怎么办
win10安装cad缺少net组件怎么办
win10系统鼠标移动方向相反怎么办
如何ping局域网内所有IP
windows10的系统保留分区有什么用
win10系统无法删除账户怎么办
win10系统音频服务未响应怎么办