docker · Docker
Le message
exec /usr/local/bin/entrypoint.sh: exec format error
Ce que cela veut dire
Le noyau n'a pas reconnu l'en-tête de cet exécutable, et de nos jours c'est presque toujours un décalage d'architecture : une image arm64 construite sur Apple Silicon exécutée sur un hôte amd64, ou l'inverse. Un script shell dépourvu de sa première ligne #!/bin/sh donne le même texte. Construire avec docker build --platform=linux/amd64 est la réponse courante, mais elle ne supprime pas le décalage : elle le masque par émulation, et tout ce qui passe par QEMU est plusieurs fois plus lent que du natif. Pour une image que vous garderez, construire les deux architectures avec buildx est la voie sans coût à l'exécution.
Le correctif
docker build --platform=linux/amd64 .- Émis par
- docker
- Docker
- 12
Les erreurs de Docker ne deviennent lisibles qu'une fois rangées par couche — le client qui n'atteint pas le démon, le registre qui refuse, un RUN qui échoue au build, un conteneur qui meurt dès son démarrage sont quatre problèmes distincts — et pour les couches build et exécution, la ligne n'est pas la raison : la raison est dans la sortie de la commande qui tournait à l'intérieur, tandis que le coût de chaque correctif varie aussi selon la couche.
Lire un message d’erreur
- Lisez à partir de la première ligne. Plus on descend, plus il s’agit des entrailles de l’outil ; la cause est généralement en haut.
- S’il y a un fichier et un numéro de ligne, commencez là — pas la première image de la pile, mais la ligne la plus haute qui nomme un fichier de vous.
- Cherchez le message tel quel, mais retirez d’abord vos chemins et vos noms de variables : c’est cela qui empêche la correspondance.
- La même situation se formule autrement selon la version de l’outil. Si les résultats sonnent faux, ajoutez le numéro de version.
- Avant de coller un correctif, vérifiez ce qu’il jette. Certains sont irréversibles.
Questions fréquentes
Q. Que veut dire « exec /usr/local/bin/entrypoint.sh: exec format error » ?
Le noyau n'a pas reconnu l'en-tête de cet exécutable, et de nos jours c'est presque toujours un décalage d'architecture : une image arm64 construite sur Apple Silicon exécutée sur un hôte amd64, ou l'inverse. Un script shell dépourvu de sa première ligne #!/bin/sh donne le même texte. Construire avec docker build --platform=linux/amd64 est la réponse courante, mais elle ne supprime pas le décalage : elle le masque par émulation, et tout ce qui passe par QEMU est plusieurs fois plus lent que du natif. Pour une image que vous garderez, construire les deux architectures avec buildx est la voie sans coût à l'exécution.
Q. Comment le corriger ?
docker build --platform=linux/amd64 . — avant de le lancer, vérifiez plus haut ce que cette commande jette.
Q. Quel outil émet cela ?
docker. Cela relève de Docker, et le message compte 5 mots.