Estaba tratando de extraer una imagen de la ventana acoplable de un registro de la ventana acoplable, pero encontré el siguiente problema:
$ docker pull <docker registry>/<image name>/<tag> Error response from daemon: Get <docker registry>/v1/_ping: x509: certificate signed by unknown authorityIntenté con "curl" y recibí un mensaje de error similar:
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.Así que descargué el certificado CA y lo importé al servidor (RedHat Linux 7) con los siguientes comandos:
cp root_cert.cer /etc/pki/ca-trust/source/anchors/ update-ca-trust Después de importar el certificado raíz, puedo ver que curl funciona bien, ya que no se quejará del error del certificado; sin embargo, si uso docker pull , sigo teniendo el mismo problema. ¿La docker utiliza una ubicación ca-cert diferente a la de curl ? ¿Cómo soluciono el problema con docker pull en esta situación?
Es posible que deba reiniciar el servicio docker para que detecte el cambio en los certificados del sistema operativo.
Docker tiene una ubicación adicional que puede usar para confiar en la CA del servidor de registro individual. Puede colocar el certificado de CA dentro /etc/docker/certs.d/<docker registry>/ca.crt . Incluya el número de puerto si lo especifica en la etiqueta de la imagen, por ejemplo, en Linux.
/etc/docker/certs.d/my-registry.example.com:5000/ca.crto en Windows 10:
C:\ProgramData\docker\certs.d\ca.crtprimero crea un archivo json vacío
cat << EOF > /etc/docker/daemon.json { } EOFque ejecutar lo siguiente para agregar certificados
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.crtfunciona sin reiniciar
O
importar el certificado al sistema como
guarde el certificado en el archivo, como el comando anterior (el puerto es crucial, no es necesario el protocolo)
openssl s_client -showcerts -connect [registry_address]:[registry_port] < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ca.crtcópielo en /usr/local/share/ca-certificates/
sudo cp ca.crt /usr/local/share/ca-certificates/ejecutar actualizar-ca-certificados
sudo update-ca-certificatesreiniciar ventana acoplable!
Aquí hay una solución rápida:
/etc/docker/daemon.json y agregue insecure-registries : ejemplo para docker.squadwars.org :
{ "insecure-registries" : ["docker.squadwars.org:443"] } systemctl restart dockerejemplo para docker.squadwars.org:
mkdir -p /etc/docker/certs.d/docker.squadwars.org 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