2016-04-11 1 views
1

Lorsque je tente de construire ou d'exécuter un conteneur de docker, par exemple:Docker sur les fenêtres - erreur de certificat

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

Elle conduit à l'erreur suivante:

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 

Toutes solution j'ai trouvé sur google sont pour Ubuntu, mais ce cas est lorsque docker est en cours d'exécution sur Windows 8 (machine virtuelle est installée).

+0

Peut-être une question idiote mais le registre https://docker.example.com/v2/ existe et vous pouvez vous authentifier auprès du registre? – lvthillo

+1

J'ai la solution. A dû ajouter le registre dans la liste de registre insécure. – xavi

+0

@xavi, pourriez-vous s'il vous plaît expliquer ce que vous entendez par "A dû ajouter le registre dans la liste insécurisée de registre"? De cette façon, vous pourriez aider les autres avec le même problème. – VME

Répondre

0

Si vous utilisez la version Docker antérieure à la version 1.12 pour Windows (celle qui utilise VirtualBox avec Boot2Docker), vous devez ajouter votre certificat de registre à la machine virtuelle Boot2Docker. A partir de la fenêtre de votre console Docker, tapez:

$ 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) 

L'étape suivante consiste à créer un script qui ajoute le certificat à une liste de certificats autorisés:

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

Ensuite, remplissez la variable « votre nom de domaine » ci-dessous et collez ce script dans le fichier que vous venez de créer:

#!/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

Si vous utilisez Docker> = 1.12 pour Windows (celui qui court natif et utilise Hyper-V au lieu de VirtualBox), vous pouvez ajouter le adresse de l'hôte de votre registre en tant que "registre non sécurisé" pour le démon Docker config:

Cliquez droit sur l'icône Docker dans la zone de notification -> Paramètres ... -> cliquez sur l'onglet 'Docker Daemon' -> changez la ligne

"insecure-registries": [ 
    ], 

dans

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

Cela m'a permis d'accéder à mon registre privé en utilisant à nouveau le nouveau Docker pour Windows. Fonctionne probablement aussi pour Mac, mais n'a pas testé.