J'essayais de tirer une image Docker d'un registre Docker mais j'ai rencontré le problème suivant:
$ docker pull <docker registry>/<image name>/<tag>
Error response from daemon: Get <docker registry>/v1/_ping: x509: certificate signed by unknown authority
J'ai essayé avec "curl" et j'obtiens un message d'erreur similaire:
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
J'ai donc téléchargé le certificat CA et importé sur le serveur (RedHat Linux 7) avec les commandes suivantes:
cp root_cert.cer /etc/pki/ca-trust/source/anchors/
update-ca-trust
Une fois le certificat racine importé, je peux voir que curl
fonctionne correctement car il ne se plaindra pas de l'erreur de certificat, mais si j'utilise docker pull
J'ai toujours le même problème. docker
utilise-t-il un emplacement ca-cert différent de curl
? Comment résoudre le problème avec docker pull
dans cette situation?
Vous devrez peut-être redémarrer le service Docker pour qu'il détecte la modification des certificats du système d'exploitation.
Docker dispose d'un emplacement supplémentaire que vous pouvez utiliser pour approuver la CA du serveur de registre individuel. Vous pouvez placer le certificat CA à l'intérieur de /etc/docker/certs.d/<docker registry>/ca.crt
. Incluez le numéro de port si vous le spécifiez dans la balise d'image, par exemple.
/etc/docker/certs.d/my-registry.example.com:5000/ca.crt
/etc/docker/daemon.json
que d'exécuter ce qui suit pour ajouter des certificats
openssl s_client -showcerts -connect <registry_address>:<registry_port> < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/docker/certs.d/<registry_address>/ca.crt
fonctionne sans redémarrage
OU
importer le certificat dans un système comme
enregistrer le certificat dans le fichier, comme la commande ci-dessus (le port est crucial, pas besoin de protocole)
openssl s_client -showcerts -connect <registry_address>:<registry_port> < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ca.crt
copiez-le dans/usr/local/share/certificats-ca /
cp ca.crt /usr/local/share/ca-certificates/
exécuter les certificats update-ca
Sudo update-ca-certificates
Voici une solution rapide:
exemple pour docker.squadwars.org:
{
“insecure-registries” : [“docker.squadwars.org:443”]
}
Redémarrez le démon docker
systemctl restart docker
Créez un répertoire avec le même nom de l'hôte.
exemple pour docker.squadwars.org:
mkdir -p /etc/docker/certs.d/docker.squadwars.org
Obtenez le certificat et enregistrez-le dans le répertoire créé.
ex + '/ BEGIN CERTIFICATE /,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect docker.squadwars.org:443) -scq> /etc/docker/certs.d/docker.squadwars.org/ docker_registry.crt