Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révisionLes deux révisions suivantes
technique:docker:general:quemu_cross_running [2021/01/22 11:45] – [QEMU dans Docker : le meilleur des 2 mondes] gblondtechnique:docker:general:quemu_cross_running [2021/01/22 13:38] – [QEMU dans Docker : le meilleur des 2 mondes] gblond
Ligne 66: Ligne 66:
 mask ffffffffffffff00fffffffffffffffffeffffff mask ffffffffffffff00fffffffffffffffffeffffff
 </code> </code>
 +
 +Cette méthode a l'avantage de ne pas nécessiter d'installer des paquets supplémentaires sur la machine hôte. Mais tout ce qui suit est tout-à-fait valable si vous avez installé qemu en global (''apt install qemu-user-static'').
  
 ### Exécuter un conteneur d’une architecture incompatible ### Exécuter un conteneur d’une architecture incompatible
  
-Comme indiqué dans l'introduction, ici rien ne change, on peut utiliser docker normalement. Enfin presque, car docker sélectionnera toujours l'architecture hôte pour une image disponible avec plusieurs architecture. Il n'y a malheureusement pas à ce jour de solution pour forcer docker à utiliser une architecture spécifiqueCette fonctionnalité existe pourtant dans d'autres outilscomme skopeo.+Comme indiqué dans l'introduction, ici rien ne change, on peut utiliser docker normalement. Enfin presque, car docker sélectionnera toujours l'architecture hôte pour une image disponible avec plusieurs architecture. Pour sélectionner l'architecture voulue, il faut utiliser l'option ''--platform=linux/arm64''. À ce jour (docker v19.03.13)cette option n'est disponible que en [[https://docs.docker.com/engine/reference/commandline/dockerd/#description | mode experimental]].
  
 Voici un exemple d'exécution : Voici un exemple d'exécution :
 +
 <code> <code>
 $ uname -a $ uname -a
Ligne 82: Ligne 85:
 </code> </code>
  
-<bootnote information>+<bootnote>
 Si vous obtenez l'erreur Si vous obtenez l'erreur
  
Ligne 88: Ligne 91:
 standard_init_linux.go:211: exec user process caused "exec format error" standard_init_linux.go:211: exec user process caused "exec format error"
 </code> </code>
-c’est que vous avez oublié d'installer qemu !+c’est que vous avez oublié de configurer qemu !
 </bootnote> </bootnote>
  
Ligne 144: Ligne 147:
 </code> </code>
  
-<bootnote note>+De même, il est possible d'utiliser l'option ''--platform=linux/arm64'' dans l'instruction ''FROM'' si docker est en mode experimental. 
 + 
 +<bootnote important> 
 +Suivant les clients dockers, il est possible que l'architecture indiquée dans l'image ne corresponde pas à celle réelle ; dans ce cas vous pourriez par mégarde écraser une image de l'architecture hôte au moment de pousser l'image sur un serveur multi-arch ! 
 + 
 +Pour connaître l'architecture que docker a associé avec une image, on peut utiliser la commande suivante : 
 + 
 +<code bash> 
 +$ docker inspect test_docker | grep Architecture 
 +        "Architecture": "arm64", 
 +</code> 
 + 
 +</bootnote> 
 + 
 +<bootnote>
 En théorie, rien ne vous interdit de copier un binaire d'une architecture A dans une image d'une architecture B. Cependant, vous ne pourrez pas l'exécuter, même si qemu est configuré sur la machine hôte. En théorie, rien ne vous interdit de copier un binaire d'une architecture A dans une image d'une architecture B. Cependant, vous ne pourrez pas l'exécuter, même si qemu est configuré sur la machine hôte.
 </bootnote> </bootnote>
  • technique/docker/general/quemu_cross_running.txt
  • de qduchemi