无法通过minikube从不安全的注册表中拉取镜像

4

我有一个本地不安全的Docker注册表,它是使用以下命令创建的:

docker run -d -p 5000:5000 --restart=always --name registry registry:2` 

我已将以下代码添加到/etc/docker/daemon.json文件中。我以localhost:5000/<orgname>/<imagename>:<tag>的格式标记了多个镜像,并将其推送到不安全的注册表。
当我运行curl -X GET localhost:5000/v2/_catalog时,可以看到它们可在本地注册表中使用。
我使用命令minikube start --insecure-registry="localhost:5000"启动了minikube。这里,我的默认驱动程序是docker(我也尝试过kvm2)。我还使用命令minikube addons enable registry启用了注册表插件。
我有一个配置映射,其中以我之前提到的格式说明了镜像。当我使用kubectl应用它时,会出现ImagePullBackoff错误,带有错误消息。
Failed to pull image "localhost:5000/org/product:tag": rpc error: code = Unknown desc = Error response from daemon: manifest for localhost:5000/org/product:tag not found: manifest unknown: manifest unknown

有什么想法,为什么会出现这种情况?

Docker 版本:19.03.8, build afacb8b7f0

Minikube 版本:1.9.2

Ubuntu 20.04 LTS

3个回答

1

好的,minikube K8s子网与您的注册表正在运行的子网不同,因此localhost在没有一些调整的情况下不起作用。我建议遵循minikube官方指南,不要运行:

docker run -d -p 5000:5000 --restart=always --name registry registry:2` 

基本上,它的意思是在运行以下代码后:
minikube addons enable registry

然后当您创建您的Minikube实例时。
minikube start --drive=docker --insecure-registry "10.0.0.0/24"

你的意思是我删除现有的注册表容器,然后使用上面的命令尝试吗?如果我删除minikube实例,那么我需要重复这些步骤,对吗? - RrR-
这个在Ubuntu上可以运行吗?当我试图将镜像推送到注册表时,我看到2020/07/16 10:10:51 socat[9] E connect(5, AF=2 172.17.0.2:5000, 16): Connection refused - RrR-
抱歉,我没有意识到您正在运行Ubuntu。socat仅适用于Mac和Windows。已更新答案。请告诉我进展如何。 - Rico

0

我在Ubuntu 20.04上使用了以下方法:

  1. 使用计算机的IP地址作为不安全注册表启动minikube:
    minikube start --insecure-registry="<your-computer-ip>:5000"
  2. 启用注册表:
    minikube addons enable registry
  3. 确保注册表正在运行:
    kubectl get service --namespace kube-system
> NAME       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                AGE
> kube-dns   ClusterIP   10.96.0.10     none          53/UDP,53/TCP,9153/TCP 54m
> registry   ClusterIP   10.98.34.133   none          80/TCP,443/TCP         37m
  • 将端口转发到本地主机:
    kubectl port-forward --namespace kube-system service/registry 5000:80
  • 构建并将您的镜像推送到本地主机
    docker tag my/image localhost:5000/myimage
    docker push localhost:5000/myimage
  • 在部署 YAML 中使用该镜像并使用 kubectl 进行应用程序 在 yaml 文件中:
  • containers:
            - name: app-name
              image: localhost:5000/image-name:latest

    0

    我通过将localhost替换为我的IP地址来解决了这个问题。

    minikube start --insecure-registry="<IP-of-your-computer>:5000"
    

    在标记和推送镜像到本地仓库时,必须使用IP而不是localhost。


    在将镜像推送到本地注册表时出现错误:Get https://<computer-ip>:5000/v2/: dial tcp 192.168.1.10:5000: connect: connection refused - Neeraj Gulia

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接