docker images镜像查询路径及Minikube本地镜像仓库访问问题咨询
问题1解答
docker images 默认查询当前对接的Docker daemon数据目录(默认路径为/var/lib/docker/image/)下的镜像元数据,返回本地Docker环境存储的所有镜像列表。
你看不到kubelet拉取的镜像核心原因是:你使用的是minikube集群,minikube默认运行在独立的虚拟机/容器环境中,自带独立的Docker daemon,和你宿主机的Docker是完全隔离的两套环境。Pod调度到minikube节点后,kubelet调用的是minikube内部的Docker拉取镜像,镜像存储在minikube内部的Docker数据目录中,宿主机的Docker自然查询不到。你可以执行minikube ssh登录到minikube节点内部,再执行docker images就能看到拉取的nginx镜像。
问题2解答
是的,这个阶段完全没有涉及你搭建的本地私有镜像仓库。手动执行docker pull nginx默认是从Docker Hub公共镜像仓库拉取镜像,没有和你本地5000端口的Registry产生任何交互。
问题3解答
你执行的docker rmi操作删除的是宿主机本地Docker daemon存储目录下的镜像文件和标签,不会影响存放在本地Registry中的镜像。
Registry的镜像独立存储在你挂载的宿主机/registry目录下,docker images只会查询当前Docker daemon本地存储的镜像,不会主动扫描本地Registry的存储内容,所以查询不到Registry中留存的nginx镜像。如果要查看本地Registry中的镜像,可以执行命令curl http://localhost:5000/v2/_catalog查看。
问题4解答
连接被拒绝原因
还是和minikube的隔离性有关:kubelet运行在minikube节点内部,拉取镜像时访问的localhost是minikube节点自己的本地回环地址,不是你宿主机的本地回环地址,而你的Registry是跑在宿主机上的,minikube内部自然访问不到宿主机的5000端口。
你可以将镜像地址中的localhost替换为宿主机的局域网IP,同时将该IP+5000端口添加到minikube的insecure-registry配置中,即可正常拉取;也可以直接使用minikube自带的registry addon在minikube内部搭建私有仓库,避免跨环境访问问题。
imagePullSecret配置问题
不需要配置。你的私有Registry没有开启身份认证,所以任意账号密码都能登录,只有Registry开启了基础身份认证或者其他访问控制策略时,才需要配置imagePullSecret提供认证凭证。
内容的提问来源于stack exchange,提问作者RoyalCoachman

