web-dev-qa-db-de.com

Docker für Mac (Edge) - Kubernetes - Verweis auf lokales Bild

Ich verwende Docker für Mac 18.05.0-ce-mac66 (24545) (Edge) mit Kubernetes-Unterstützung, und ich kämpfe mit dem Erstellen einer kubernetes-Bereitstellung, die auf ein lokal erstelltes Image verweist.

Ausgabe von docker images: REPOSITORY TAG IMAGE test latest 2c3bdb36a5ed

Meine Bereitstellung.yaml: apiVersion: apps/v1 kind: Deployment metadata: name: helloworld-deployment spec: selector: matchLabels: app: helloworld replicas: 1 template: metadata: labels: app: helloworld spec: containers: - name: aaa image: test:latest ports: - containerPort: 8080

Wenn ich kubectl apply -f deplyment.yaml laufen lasse, werden folgende erstellt:

helloworld-deployment-764b8b85d8-2c4kl 0/1 ImagePullBackOff 0
helloworld-deployment-764b8b85d8-rzq7l 0/1 ImagePullBackOff 0
 

Beschreiben Sie einen dieser Pods mit: Normal Scheduled 20s default-scheduler Successfully assigned helloworld-deployment-79f66d97c6-7tj2x to docker-for-desktop Normal SuccessfulMountVolume 19s kubelet, docker-for-desktop MountVolume.SetUp succeeded for volume "default-token-72f44" Normal BackOff 16s kubelet, docker-for-desktop Back-off pulling image "test:latest" Warning Failed 16s kubelet, docker-for-desktop Error: ImagePullBackOff Normal Pulling 4s (x2 over 19s) kubelet, docker-for-desktop pulling image "test:latest" Warning Failed 2s (x2 over 17s) kubelet, docker-for-desktop Failed to pull image "test:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for test, repository does not exist or may require 'docker login' Warning Failed 2s (x2 over 17s) kubelet, docker-for-desktop Error: ErrImagePull

Interessant ist, dass, wenn ich versuche, ein auf dockerhub gehostetes Image auszuführen, alles in Ordnung ist. Ich habe auch versucht, skaffold zu verwenden, und es funktioniert auch als Charme ...

Ich sehe einige ähnliche Probleme in Bezug auf Minikube, bei denen die Lösung darin besteht, Minikube Docker-Deamon für erstellte Bilder zu verwenden, damit sie vom kubernetes-Cluster referenziert werden können. Ich möchte die Einrichtung eines lokalen Repos vermeiden, aber wie kann ich es mit Docker Edge Kubernetes funktionieren lassen? 

6
user62058

Ich konnte ein lokales Image ausführen, indem Sie imagePullPolicy auf Never setzen.

Zum Beispiel:

apiVersion: v1
kind: Pod
metadata:
  name: local-image-test
spec:
  containers:
  - name: local-image-container
    image: local-image:latest
    imagePullPolicy: Never

(Kredit an https://github.com/kubernetes/kubernetes/issues/1293#issuecomment-357326426 für diese Lösung)

11
Levi Blackstone

Verwenden Sie die Tag-Version des Images anstelle der neuesten Version, da Sie Docker-Images an eine Produktionsumgebung versenden, wenn Sie das neueste Tag einfach ignorieren. Verwenden Sie es nicht. Lass dich nicht in Versuchung führen. Es ist einfach, sich das anzuschauen und zu denken, dass Ihr Implementierungsskript nur die neuesten Informationen abrufen sollte, und Ihr Erstellungsprozess stellt sicher, dass diese Gültigkeit gültig ist.

2
Prateek Jain

Zusätzlich zu techtrainer comment und answer. Möchte ich einige Beispiele dafür geben.

Allgemeine Regel. Sie müssen die Tag-Version von Bildern anstelle von latest..__ verwenden. Bei Docker-Tags gilt: Je genauer Sie werden, desto besser. Achten Sie darauf, dass das falsche Bild nicht verwendet wird. Berücksichtigen Sie dies, wenn Sie nicht möchten, dass Ihre Kollegen oder andere Docker-Benutzer Bilder herunterziehen und keine Ahnung haben, wie aktuell sie sind.

docker tag IMAGE ID image/TAG:version.d.m.y

Für eine bessere Verwaltung Ihrer Bilder sollten Sie einige kluge Konventionen für die Benennung verwenden. Ich benutze lieber eine Stufe, Version und ein Erstellungsdatum des Bildes. Zum Beispiel:

docker tag 113a43faa138 ubuntu/prod:v1.8.6.2018

Es ist die Produktionsphase, Version 1, die am 8. Juni 2018 erstellt wurde.

Und das ist alles. Ihre Version ist verfügbar und die Benennung ist für Sie und Weitere Benutzer dieses Bildes einfacher zu verstehen.

0
d0bry