簡體   English   中英

Minikube不會從本地Docker容器注冊表中提取圖像

[英]Minikube not pull image from local docker container registry

我正在嘗試將容器部署到本地kubernetes,現在我已經安裝了docker deamon,minikube和minikube儀表板。 這一切都很好。 我還在端口5000上設置了本地容器存儲庫。我還推送了2個應用程序映像。 我可以在瀏覽器http:// localhost:5000 / v2 / _catalog上看到它們

現在,當我嘗試使用minikube上吊艙時。

kubectl apply -f ./docker-compose-k.yml --record

我在這樣的儀表板上收到錯誤:

Failed to pull image "localhost:5000/coremvc2": rpc error: code = Unknown desc = Error response from daemon: Get http://localhost:5000/v2/: dial tcp 127.0.0.1:5000: connect: connection refused 

這是我的撰寫文件:-

apiVersion: apps/v1
kind: Deployment
metadata:
  name: core23
  labels:
    app: codemvc
spec:
  replicas: 1
  selector:
    matchLabels:
      app: coremvc
  template:
    metadata:
      labels:
        app: coremvc
    spec:
      containers:
      - name: coremvc
        image: localhost:5000/coremvc2
        ports:
        - containerPort: 80
        imagePullPolicy: Always

我不知道為什么由於docker deamon和kubernetes都在同一台機器上而沒有拉這個圖像。 我也嘗試過使用dockerhub映像進行此操作,並且工作正常,但是我想使用本地映像進行此操作。 請給我提示或任何指導。

謝謝,

根據注釋,您使用minikube start (未指定驅動程序) minikube startminikube start

這意味着minikube在Virtualbox VM內運行。 為了使您的用例起作用,您有兩種選擇:

  1. 困難的方法設置VM與主機之間的連接並使用主機IP
  2. 簡單的方法使用minikube ssh連接到您的VM並在其中安裝注冊表。 然后,您的部署應使用VM的IP。

如果不想使用“虛擬”框,則應閱讀有關其他現有驅動程序以及如何使用它們的文檔

希望這可以幫助 !

localhost:5000指向容器本身。

如果Docker注冊表在運行minikube的同一主機上運行:

  • 獲取主機的IP地址(例如,使用ifconfig )。 說,它是10.0.2.15

  • 標記圖像:

     docker tag coremvc2:latest 10.0.2.15:5000/coremvc2:latest 
  • 將帶有標簽的圖像推送到本地注冊表:

     docker push 10.0.2.15:5000/coremvc2:latest 
  • 部署中的更改:

     image: localhost:5000/coremvc2 

     image: 10.0.2.15:5000/coremvc2:latest 

編輯:如果出現“ ... http:服務器向HTTPS客戶端提供HTTP響應”錯誤,則可以通過編輯/etc/docker/daemon.json將本地Docker注冊表配置為本地Docker守護程序的不安全注冊表 (如果創建的話,請創建它不存在):

{ 
... any other settings or remove this line ...
  "insecure-registries": ["10.0.2.15:5000"] 
}

...然后重啟docker:

 sudo service docker restart

不確定如何運行本地Docker注冊表,但這是一種方法:

 docker run -d -p 5000:5000 --name registry registry:2

問題是您在主機上設置了docker注冊表,並且minikube在虛擬化環境中運行(根據您的示例為Virtualbox)。

這就是為什么在嘗試在端口5000上獲取映像時收到“連接被拒絕”錯誤的原因。根本原因是,沒有進程在“內部” minikube上偵聽5000。您的注冊表被部署在minikube的“外部”。

正如Marc所說,有兩種方法可以修復ita,而我已復制了這兩種方法。 艱苦的方法會讓您:

Failed to pull image "10.150.0.4:5000/my-alpine": rpc error: code = Unknown desc = Error response from daemon: Get https://10.150.0.4:5000/v2/: http: server gave HTTP response to HTTPS client

因此,您必須根據Docker文檔設置安全的Docker注冊表

簡單的方法是將其設置在您的minikube之上。

my@linux-vm2:~$ minikube ssh
$ docker run -d -p 5000:5000 --restart=always --name registry registry:2
...
Status: Downloaded newer image for registry:2

$ docker pull nginx:latest
...
Status: Downloaded newer image for nginx:latest

$ docker tag alpine:latest localhost:5000/my-nginx
$ docker push localhost:5000/my-nginx
$ logout

my@linux-vm2:~$ kubectl apply -f ./docker-compose-k.yml --record
deployment.apps/core23 created


my@linux-vm2:~$ kubectl get  pods
NAME                     READY   STATUS    RESTARTS   AGE
core23-b44b794cb-vmhwl   1/1     Running   0          4s

my @linux-vm2:~$ kubectl describe pods
...
Events:
  Type    Reason     Age        From               Message
  ----    ------     ----       ----               -------
  Normal  Scheduled  <unknown>  default-scheduler  Successfully assigned default/core23-b44b794cb-vmhwl to minikube
  Normal  Pulling    9s         kubelet, minikube  Pulling image "localhost:5000/my-nginx"
  Normal  Pulled     9s         kubelet, minikube  Successfully pulled image "localhost:5000/my-nginx"
  Normal  Created    9s         kubelet, minikube  Created container coremvc
  Normal  Started    9s         kubelet, minikube  Started container coremvc

請注意,在此示例中,我一直在使用nginx而不是coremvc2 (但步驟仍然相同)。

綜上所述,可以通過幾種不同的方式來獲得所需的結果。 請嘗試,讓我們知道它的進展。 干杯:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM