Faire un docker-machine ls
a obtenu l'inattendu Unable to query docker version: Get https://x.x.x.x:2376/v1.15/version: x509: certificate has expired or is not yet valid
pour chaque machine.
Je n'avais rien fait récemment. En regardant SO, j'ai essayé quelques coupables courants, VPN, virus, problèmes d'horloge étranges, etc. Rien de tout cela ne s'appliquait. Comment puis-je les réparer pour les rendre à nouveau utilisables (via le docker-machine
interface)?
Utilisation de Docker pour Mac, 17.12.0-ce-49
pdate - comme je l'ai commenté le 14/02/2018, cela fait maintenant partie de docker-machine.
Essayez: docker-machine regenerate-certs --client-certs
Réponse historique ci-dessous:
Première, docker-machine regenerate-certs
ne régénère PAS le ou les certificats client.
Après avoir fouillé avec openssl
, j'ai découvert que c'était en fait le certificat client qui avait expiré. Vérifier:
openssl x509 -in ~/.docker/machine/certs/cert.pem -text | grep "Not After"
J'ai essayé de recréer les certificats in situ avec le même ca.pem
mais ça n'a pas marché (pour moi). Je suppose que cela aurait finalement fonctionné, étant donné beaucoup plus de temps et d'essais et d'erreurs.
Ce qui a finalement fonctionné était de sauvegarder le répertoire entier, de créer une machine jetable factice (pour forcer la machine à docker à créer de nouveaux certificats), de déplacer les configurations, les clés ssh et les certificats de serveur (pas certificats client), puis émission d'une régénération pour chaque machine. NB, c'est perturbant et douloureux. Comme l'avertissement le montre, docker-machine regenerate-certs
redémarrera docker sur la machine cible. Bien qu'il soit trop tard pour moi, j'aimerais voir une meilleure réponse.
Le processus ressemble à:
#!/bin/bash
cd ~/.docker || exit
cp -R machine machine.bak
rm -rf machine
docker-machine create deleteme
docker-machine rm -rf deleteme
cd machine/machines || exit
for m in $(~/.docker/machine.bak/machines)
do
cp -R "../../machine.bak/machines/$m" .
rm "$m/cert.pem"
rm "$m/key.pem"
cp certs/cert.pem "$m"
cp certs/key.pem "$m"
docker-machine regenerate-certs -f
done
Essayer:
docker-machine regenerate-certs --client-certs <machine name>
Le --client-certs
est important.
Remarque:
La validité peut être vérifiée en exécutant:
openssl x509 -in ~/.docker/machine/certs/cert.pem -text -noout | less
Le résultat est quelque chose comme:
Certificate:
Data:
...
Signature Algorithm: sha256WithRSAEncryption
...
Validity
Not Before: Mar 12 09:03:00 2018 GMT
Not After : Feb 24 09:03:00 2021 GMT
...