2016-04-11 8 views
1

Wenn ich versuche, einen Docker Container zu bauen oder laufen, zum Beispiel:Docker auf Windows - Zertifikatsfehler

docker build -t docker.example.com/research/example_project .

Es wird zu folgenden Fehlern führt:

Sending build context to Docker daemon 6.513 MB 
Step 1 : FROM docker.example.com/research/example_project:latest 
unable to ping registry endpoint https://docker.example.com/v0/ 
v2 ping attempt failed with error: Get https://docker.example.com/v2/: x509: certificate signed by unknown authority 
v1 ping attempt failed with error: Get https://docker.example.com/v1/_ping: x509: certificate signed by unknown authority 

Alle Abhilfe, die ich auf Google gefunden sind für ubuntu, aber dieser Fall ist, wenn docker auf Windows 8 läuft (virtuelle Maschine ist installiert).

+0

Vielleicht eine dumme Frage, aber die https://docker.example.com/v2/ Registry existiert und Sie können die Registrierung authentifizieren? – lvthillo

+1

Ich habe die Lösung. Musste Registry in unsichere Registry-Liste hinzufügen. – xavi

+0

@xavi, könnten Sie bitte erklären, was Sie mit "musste Registry in unsicheren Registry-Liste hinzufügen"? Auf diese Weise können Sie anderen mit dem gleichen Problem helfen. – VME

Antwort

0

Wenn Sie die Pre-1.12 Docker Version für Windows verwenden (die, die VirtualBox mit Boot2Docker verwendet), müssen Sie Ihre Registrierung Zertifikat an den Boot2Docker virtuellen Maschine hinzuzufügen. Von Ihrem Docker Konsolenfenster ein:

$ docker-machine ssh default 
$ DOMAIN_NAME=<type your domain name here>:5000 
$ sudo mkdir -p /etc/docker/certs.d/$DOMAIN_NAME 
$ sudo vi /etc/docker/certs.d/$DOMAIN_NAME/ca.crt 

--> then copy certificate text in there and save (type :wq) 

Der nächste Schritt ist die Schaffung eines Skripts, das das Zertifikat in eine Liste der erlaubten Zertifikate ergänzt:

$ sudo touch /var/lib/boot2docker/bootlocal.sh && sudo chmod +x /var/lib/boot2docker/bootlocal.sh 
$ sudo vi /var/lib/boot2docker/bootlocal.sh 

Dann füllen Sie das „Ihren Domain-Namen“ Variable unten und dieses Skript einfügen in der Datei erstellt einfach:

#!/bin/bash 
CA_CERTS_DIR=/usr/local/share/ca-certificates 
DOCKER_CERTS_DOMAIN_DIR=/etc/docker/certs.d/<your domain name> 
CERTS_DIR=/etc/ssl/certs 
CAFILE=${CERTS_DIR}/ca-certificates.crt 

cp ${DOCKER_CERTS_DOMAIN_DIR}/ca.crt ${CA_CERTS_DIR} 


for cert in $(/bin/ls -1 ${DOCKER_CERTS_DOMAIN_DIR}); do 
SRC_CERT_FILE=${CA_CERTS_DIR}/${cert} 
CERT_FILE=${CERTS_DIR}/${cert} 
HASH_FILE=${CERTS_DIR}/$(/usr/local/bin/openssl x509 -noout -hash -in ${SRC_CERT_FILE} 2>/dev/null) 

[ ! -L ${CERT_FILE} ] && /bin/ln -fs ${SRC_CERT_FILE} ${CERT_FILE} 

for idx in $(/usr/bin/seq 0 9); do 
if [ -L ${HASH_FILE}.${idx} ]; then 
[ "$(/usr/bin/readlink ${HASH_FILE}.${idx})" = "${SRC_CERT_FILE}" ] && break 
else 
/bin/ln -fs ${SRC_CERT_FILE} ${HASH_FILE}.${idx} 
break 
fi 
done 
/bin/cat ${SRC_CERT_FILE} >> ${CAFILE} 
done 
0

Wenn Sie Docker laufen> = 1.12 für Windows (die, die nativen läuft und verwendet Hyper-V anstelle von VirtualBox), können Sie das Video! Host-Adresse Ihrer Registrierung als "unsichere Registrierung" zum Docker-Daemon Config:

Klicken Sie mit der rechten Maustaste Docker-Symbol in der Taskleiste -> Einstellungen ... -> klicken Sie auf den 'Docker Daemon' Registerkarte -> ändern die Linie

"insecure-registries": [ 
    ], 

in

"insecure-registries": [ 
"your.domain.com:5000" 
    ], 

die erlaubte ich meine private Registry erneut, um auf die neuen Docker für Windows. Funktioniert wahrscheinlich auch für Mac, hat es aber nicht getestet.