Copier une image Docker d'une machine à l'autre

Posted by ZedTuX 0n R00t on May 19, 2020

Ce matin, petite suprise, quay.io est tombé! 😱️

J’ai découvert cette information par la force des choses puisque je n’arrivais pas à installer le driver CNI Flannel de CoreOS avec ces erreurs:

1
2
3
4
5
6
7
8
Flannel container status changed to Init:0/1.
Flannel container status changed to Init:ErrImagePull.
Flannel container status changed to Init:ImagePullBackOff.
Flannel container status changed to Init:ErrImagePull.
Flannel container status changed to Init:ImagePullBackOff.
Flannel container status changed to Init:ErrImagePull.
Flannel container status changed to Init:ImagePullBackOff.
Flannel container status changed to Init:ErrImagePull.

Bref … comment faire?

J’ai tout d’abord cherché un registre mirroir de cette image … mais je n’ai rien trouvé qui semblait fiable.

Mais j’ai des serveurs où l’image est présente … donc la question est la suivante:

Comment transférer une image d’une machine à l’autre?

Et la réponse a été donnée par kolypto dans cette réponse:

1
2
docker save <image> | bzip2 | pv | \
     ssh user@host 'bunzip2 | docker load'

Attention: Le paquet pv doit être installé.

Voici donc la procédure:

  1. Sur le serveur d’où l’image sera copié, créez une clé SSH avec ssh-keygen
  2. Importez la clé publique sur le serveur où l’image sera copiée
  3. Repérez le nom de l’image Docker à copier:
    1
    2
    
    # docker images | grep flannel | awk '{print $1":"$2}'
    quay.io/coreos/flannel:v0.10.0-amd64
    
  4. Copiez l’image:
    1
    2
    3
    4
    
    # docker save quay.io/coreos/flannel:v0.10.0-amd64 | bzip2 | pv | \
     ssh root@<serveur de destination> 'bunzip2 | docker load'
    11.5MiB 0:00:09 [1.19MiB/s] [                <=>                     ]
    Loaded image: quay.io/coreos/flannel:v0.10.0-amd64
    

Voilà, l’image apparaît bien sur le serveur cible, et mon noeud master passe en Ready 🎉️