127.0.0.1:5000:getsockopt:Minikube中的连接被拒绝

时间:2018-07-17 21:03:37

标签: docker minikube

在本地Ubuntu工作站上使用minikube和docker,我在Minikube Web UI中收到以下错误:

#include "stdafx.h"
#include <stdio.h>
#include <string.h>


int main() {
    unsigned char digest[SHA512_DIGEST_LENGTH];
    char string[] = "hello world";

    SHA512((unsigned char*)&string, strlen(string), (unsigned char*)&digest);

    char mdString[SHA512_DIGEST_LENGTH * 2 + 1];

    for (int i = 0; i < SHA512_DIGEST_LENGTH; i++)
        sprintf(&mdString[i * 2], "%02x", (unsigned int)digest[i]);

    printf("SHA512 digest: %s\n", mdString);

    return 0;
}

使用以下命令创建以下部署配置后:

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

hello-world-deployment.yaml

kubectl apply -f hello-world-deployment.yaml

并从docker映像输出:

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

基于本指南: How to use local docker images with Minikube?

我也跑过:

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

并基于此:

https://github.com/docker/for-win/issues/624

我添加了:

eval $(minikube docker-env)

"InsecureRegistry": [ "localhost:5000", "127.0.0.1:5000" ],

关于我缺少什么使图像在minikube中工作的建议?

我已经按照以下答案中的步骤进行操作,但是当我到达此步骤时:

/etc/docker/daemon.json

它只是这样挂起:

$ kubectl port-forward --namespace kube-system $(kubectl get po -n kube-system | grep kube-registry-v0 | awk '{print $1;}') 5000:5000

在创建我的Deploymentconfig之后,我在minikube仪表板中遇到了相同的错误。

基于 BMitch 的回答,我现在尝试创建本地docker存储库并使用以下命令将映像推送到其中:

$ 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

接下来,当我处理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

然后我将我的Deploymentconfig hello-world-deployment.yaml 更新为:

$ 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

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

但是在Minikube中,我仍然遇到类似的错误:

kubectl create -f hello-world-deployment.yaml

似乎Minikube不允许查看我刚刚创建的本地注册表?

2 个答案:

答案 0 :(得分:3)

您似乎遇到了计算机上的 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

如果您想从计算机上共享私人注册表,则可能对sharing local registry for minikube博客条目感兴趣。

答案 1 :(得分:0)

如果您将映像源指定为本地注册表服务器,则需要在其中运行注册表服务器,然后将映像推送到其中。

您可以自行托管具有多个第三方选项的注册表服务器,或运行打包在Docker容器中的该第三方服务器:https://hub.docker.com/_/registry/

这仅适用于单节点环境,除非您设置TLS密钥,信任CA或将其他不安全的注册表告知所有其他节点。

您还可以将imagePullPolicy指定为“从不”。


这两个解决方案都已经存在于您的链接问题中,我看不到有任何证据表明您尝试过此问题中的任何一个。在没有显示您如何尝试这些步骤并遇到其他问题的情况下,应该将此问题作为一个重复项予以解决。