我有一个本地不安全的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
启用了注册表插件
我有一个configmap,它以我前面提到的格式声明图像。当我使用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
好吧,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"
我能够通过用我的IP替换localhost来解决这个问题。
minikube start --insecure-registry="<IP-of-your-computer>:5000"
在标记图像并将其推送到本地注册表时,必须使用IP而不是localhost。
我在Ubuntu 20.04 上使用了以下内容
- 以不安全注册表作为计算机的ip启动minikube:
minikube start --insecure-registry="<your-computer-ip>:5000"
- 启用注册表:
minikube addons enable registry
- 确保注册表已启动并正在运行:
kubectl get service --namespace kube-system
>名称类型集群-IP外部IP端口年龄>kube dns ClusterIP 10.96.0.10 none 53/UDP,53/TCP,9153/TCP 54m>registry ClusterIP 10.98.34.333 none 80/TCP,443/TCP 37m
- 端口转发到本地主机:
kubectl port-forward --namespace kube-system service/registry 5000:80
- 构建图像并将其推送到localhost
docker tag my/image localhost:5000/myimage
docker push localhost:5000/myimage
- 使用部署yaml中的映像并使用kubectl应用在yaml文件中:
容器:-名称:应用程序名称image:localhost:5000/image-name:latest