docker - 127.0.0.1:5000:getsockopt:Minikube 中的连接被拒绝
问题描述
在我的本地 Ubuntu 工作站上使用 minikube 和 docker 我在 Minikube Web UI 中收到以下错误:
Failed to pull image "localhost:5000/samples/myserver:snapshot-180717-213718-0199": rpc error: code = Unknown desc = Error response from daemon: Get http://localhost:5000/v2/: dial tcp 127.0.0.1:5000: getsockopt: connection refused
在我创建了以下部署配置后:
kubectl apply -f hello-world-deployment.yaml
你好世界部署.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hello-world
spec:
replicas: 1
template:
metadata:
labels:
app: hello-world
tier: backend
spec:
containers:
- name: hello-world
image: localhost:5000/samples/myserver:snapshot-180717-213718-0199
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 8080
以及来自 docker 图像的输出:
REPOSITORY TAG IMAGE ID CREATED SIZE
samples/myserver latest aa0a1388cd88 About an hour ago 435MB
samples/myserver snapshot-180717-213718-0199 aa0a1388cd88 About an hour ago 435MB
k8s.gcr.io/kube-proxy-amd64 v1.10.0 bfc21aadc7d3 3 months ago 97MB
基于本指南: 如何在 Minikube 中使用本地 docker 镜像?
我也跑过:
eval $(minikube docker-env)
并基于此:
https://github.com/docker/for-win/issues/624
我已经添加了:
"InsecureRegistry": [
"localhost:5000",
"127.0.0.1:5000"
],
至/etc/docker/daemon.json
关于我缺少什么以使图像在 minikube 中工作的任何建议?
我已按照以下答案中的步骤进行操作,但是当我执行此步骤时:
$ kubectl port-forward --namespace kube-system $(kubectl get po -n kube-system | grep kube-registry-v0 | awk '{print $1;}') 5000:5000
它只是这样挂起:
$ kubectl port-forward --namespace kube-system $(kubectl get po -n kube-system | grep kube-registry-v0 | awk '{print $1;}') 5000:5000
Forwarding from 127.0.0.1:5000 -> 5000
Forwarding from [::1]:5000 -> 5000
创建部署配置后,我在 minikube 仪表板中遇到相同的错误。
根据BMitch的回答,我现在尝试创建一个本地 docker 存储库并将图像推送到它:
$ docker run -d -p 5000:5000 --restart always --name registry registry:2
$ docker pull ubuntu
$ docker tag ubuntu localhost:5000/ubuntu:v1
$ docker push localhost:5000/ubuntu:v1
接下来,当我做 docker 图像时,我得到:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 74f8760a2a8b 4 days ago 82.4MB
localhost:5000/ubuntu v1 74f8760a2a8b 4 days ago 82.4MB
然后我将我的 deploymentconfig hello-world-deployment.yaml更新为:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hello-world
spec:
replicas: 1
template:
metadata:
labels:
app: hello-world
tier: backend
spec:
containers:
- name: hello-world
image: localhost:5000/ubuntu:v1
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: GET_HOSTS_FROM
value: dns
ports:
- containerPort: 8080
和
kubectl create -f hello-world-deployment.yaml
但是在 Minikube 中我仍然遇到类似的错误:
Failed to pull image "localhost:5000/ubuntu:v1": rpc error: code = Unknown desc = Error response from daemon: Get http://localhost:5000/v2/: dial tcp 127.0.0.1:5000: getsockopt: connection refused
那么似乎不允许 Minikube 看到我刚刚创建的本地注册表?
解决方案
您的计算机上的localhost和minikube VM上下文中使用的localhost似乎遇到了问题。要使注册表正常工作,您必须设置额外的端口转发。
如果您的minikube安装当前由于尝试修复注册表问题而被破坏,我建议重新启动 minikube 环境:
minikube stop && minikube delete && rm -fr $HOME/.minikube && minikube start
接下来,获取 kube 注册表 yaml 文件:
curl -O https://gist.githubusercontent.com/coco98/b750b3debc6d517308596c248daf3bb1/raw/6efc11eb8c2dce167ba0a5e557833cc4ff38fa7c/kube-registry.yaml
然后,将它应用到 minikube 上:
kubectl create -f kube-registry.yaml
测试 minikube VM 中的注册表是否有效:
minikube ssh && curl localhost:5000
在 Ubuntu 上,转发端口以到达 5000 端口的注册表:
kubectl port-forward --namespace kube-system $(kubectl get po -n kube-system | grep kube-registry-v0 | awk '{print $1;}') 5000:5000
如果您想从您的机器上共享您的私有注册表,您可能有兴趣为 minikube博客条目共享本地注册表。
推荐阅读
- android - 我的 Android 应用程序允许第一次 google 登录,之后它提供以下错误 ApiException:10:
- javascript - 数据表输入与行相处
- java - 关于spring bean初始化的顺序
- reactjs - redux store 安装 redux-saga 后创建 store 时出错
- javascript - JS:异步/等待多个承诺
- python - StaleElementReferenceException 即使有明确的等待
- java - 查找字符串中倒数第二个出现的字符
- algorithm - 有没有找到没有的算法。0-1 完全有向图中的 k 权重哈密顿路径
- amazon-web-services - AWS Cloudformation 循环输入参数
- javascript - 如何使用 href 和 onclick 函数传递参数?