El error "x509: certificate has expired or is not yet valid" al ejecutar docker pull indica un fallo en la validación del certificado SSL/TLS durante la conexión al registro de imágenes. Esto se debe generalmente a dos causas: el certificado ha caducado o la hora del sistema está desincronizada.
Verificación y corrección de la hora del sistema
Una hora incorrecta en el sistema impide la validación adecuada de los certificados, ya que estos dependen de marcas temporales UTC precisas. Para comprobar la configuración actual, use el comando:
timedatectl status
Si la hora es inexacta, sincronice con un serviodr NTP mediante herramientas como chrony:
sudo chronyc makestep
Esto ajustará la hora del sistema a la hora de red más cercana.
Actualización y gestión de certificados
Si la hora es correcta, el problema puede radicar en certificados raíz obsoletos o en los propios del repositorio. Asegúrese de que el cliente Docker esté actualizado, ya que las versiones recientes incluyen renovaciones de certificados. En sistemas basados en RHEL o CentOS, ejecute:
sudo yum update docker-ce
Para sistemas Debian o Ubuntu, utilice:
sudo apt-get update && sudo apt-get install docker-ce
En casos extremos, puede ser necesario borrar la caché de certificados de Docker y reiniciar el servicio, pero esto solo se recomienda como último recurso.
Consideraciones sobre el registro de imágenes
El error podría originarse en el servider del registro, no localmente. Verifique el estado del proveedor del registro o contacte soporte si usa un repositorio privado. Asegúrese de que los certificados del repositorio privado estén importados en la confianza de Docker mediante el directorio /etc/docker/certs.d/.
Uso de aceleradores de registro
En entornos con restricciones de red, como algunas regiones, el acceso directo a registros públicos puede fallar por problemas de certificado. Considere usar un servicio de aceleración de registro, que actúa como proxy para evitar tales inconvenientes. Para configurarlo, edite el archivo /etc/docker/daemon.json (créelo si no existe) con el JSON adecuado:
{
"registry-mirrors": ["https://mirror.example.com"]
}
Reemplace la URL con la dirección proporcionada por su proveedor de aceleración. Después, reinicie Docker para aplicar los cambios:
sudo systemctl restart docker