2016-03-26 7 views
13

ich andernfalls den Zugriff auf von meinem privaten Docker Hub-Repository in meinem lokalen Kubernetes Setup auf Vagrant laufen ziehen:Wie privat Docker Hub-Repository von Kubernetes auf Vagrant

Container "hellonode" in pod "hellonode-n1hox" is waiting to start: image can't be pulled

Failed to pull image "username/hellonode": Error: image username/hellonode:latest not found

I Kubernetes über Vagrant lokal eingerichtet haben als beschrieben here und erstellt ein Geheimnis namens "dockerhub" mit kubectl erstellen geheime docker-registry dockerhub --docker-server = https://registry.hub.docker.com/ --docker-username = benutzername --docker-password = ... --docker-email = .. . die ich als Image-Pull-Secret geliefert habe.

Ich betreibe Kubernetes 1.2.0.

Antwort

38

Um eine private DockerHub ziehen gehosteten Bild von einem Kubernetes YAML:

Sie folgende Befehle ein:

DOCKER_REGISTRY_SERVER=https://index.docker.io/v1/ 
DOCKER_USER=Type your dockerhub username, same as when you `docker login` 
DOCKER_EMAIL=Type your dockerhub email, same as when you `docker login` 
DOCKER_PASSWORD=Type your dockerhub pw, same as when you `docker login` 

kubectl create secret docker-registry myregistrykey \ 
    --docker-server=$DOCKER_REGISTRY_SERVER \ 
    --docker-username=$DOCKER_USER \ 
    --docker-password=$DOCKER_PASSWORD \ 
    --docker-email=$DOCKER_EMAIL 

Wenn Ihr Benutzername auf DockerHub ist DOCKER_USER und privaten Repo ist PRIVATE_REPO_NAME genannt, und das Bild, das Sie ziehen möchten, wird als latest markiert, erstellen Sie diese example.yaml Datei:

apiVersion: v1 
kind: Pod 
metadata: 
    name: whatever 
spec: 
    containers: 
    - name: whatever 
     image: index.docker.io/DOCKER_USER/PRIVATE_REPO_NAME:latest 
     imagePullPolicy: Always 
     command: [ "echo", "SUCCESS" ] 
    imagePullSecrets: 
    - name: myregistrykey 

Dann laufen:

kubectl create -f example.yaml 
+1

beste Antwort für sicher – AndrewMcLagan

+0

Lifesaver, verwenden Sie seine Antwort, wenn Sie Kube-Hölle vermeiden wollen. –

+0

beste und einfachste Erklärung. funktioniert wie Charme – user3913439

0

Sie können diese Anweisungen unter how to configure nodes to authenticate to a private repository befolgen, um die kubelets so zu konfigurieren, dass Docker Ihre Anmeldedaten verwendet, oder folgen Sie + Phagun Bayas Lösung mit imagePullSecrets, die für Pods gilt.

+0

Vielen Dank für Ihre Antwort, aber der von Ihnen angegebene Link funktioniert nicht. –

+0

Sollte jetzt OK sein, sorry. – EricM

5

erstellen k8 Secret:

apiVersion: v1 
kind: Secret 
metadata: 
    name: repositorySecretKey 
data: 
    .dockerconfigjson: <base64 encoded docker auth config> 
type: kubernetes.io/dockerconfigjson 

dann in pod oder rc Config das Geheimnis erwähnen. Beispiel:

apiVersion: v1 
kind: Pod 
metadata: 
    name: test-pod 
spec: 
    containers: 
    - name: test-pod 
     image: quay.io/example/hello:1.1 
    imagePullSecrets: 
    - name: repositorySecretKey 

Docker Auth Config

{ 
    "https://quay.io": { 
    "email": ".", 
    "auth": "<base64 encoded auth token>" 
    } 
} 

Oder

kubectl create secret docker-registry myregistrykey \ 
    --docker-server=DOCKER_REGISTRY_SERVER \ 
    --docker-username=DOCKER_USER \ 
    --docker-password=DOCKER_PASSWORD \ 
    --docker-email=DOCKER_EMAIL 
+0

Guter Punkt: in der Tat ist das niedriger in dem Dokument, das ich verlinkt habe: http://kubernetes.io/docs/user-guide/images/#specifying-imagepullsecrets-on-a-pod. – EricM

+0

Sie können auch versuchen, etwas wie 'kubectl erstellen geheime docker-registry myregistrykey --docker-server = DOCKER_REGISTRY_SERVER --docker-username = DOCKER_USER --docker-password = DOCKER_PASSWORD --docker-email = DOCKER_EMAIL'. Dies fügt das Geheimnis automatisch hinzu und Sie müssen nur 'imagePullSecrets' in pod oder rc config hinzufügen. –

Verwandte Themen