Dépannage Docker
Cette page fournit des conseils de dépannage pour les problèmes que vous pouvez rencontrer avec les builds Docker produits par les générateurs. Consultez le guide Docker Bundling pour en savoir plus sur le modèle qu’ils suivent.
Builds multi-plateformes
Section intitulée « Builds multi-plateformes »Les générateurs tels que ts#strands-agent, py#strands-agent, ts#mcp-server et py#mcp-server produisent des images pour linux/arm64 (Graviton), quelle que soit l’architecture de l’hôte. Construire une image arm64 sur un hôte x86_64 — ou une image amd64 sur Apple Silicon — nécessite la prise en charge des builds multi-plateformes dans votre installation Docker locale.
Si les builds multi-plateformes ne sont pas configurés, le symptôme dépend du Dockerfile :
-
Le
Dockerfilecontient une étapeRUN(les générateurs TypeScript exécutentRUN npm installpour les dépendances non empaquetables) : le build échoue en cours de route avecFenêtre de terminal exec /bin/sh: exec format error -
Le
Dockerfileutilise uniquementCOPY(générateurs Python) : le build réussit, maisdocker runéchoue plus tard avecFenêtre de terminal exec /usr/local/bin/python: exec format error -
L’image de base n’est pas disponible pour la plateforme cible : le build échoue à l’étape
FROMavecno match for platform in manifest.
Activer les builds multi-plateformes
Section intitulée « Activer les builds multi-plateformes »Docker Desktop (Mac / Windows / Linux) est livré avec l’émulation QEMU activée par défaut — aucune configuration supplémentaire n’est généralement requise.
Les hôtes Linux (y compris les runners CI) nécessitent l’enregistrement des gestionnaires QEMU binfmt avec le noyau. Installez-les une fois par machine :
docker run --privileged --rm tonistiigi/binfmt --install allVérifiez que les plateformes prises en charge correspondent à ce que votre projet cible :
docker buildx inspect --bootstrapLa ligne Platforms: doit inclure linux/arm64.
Builds lents sur architectures émulées
Section intitulée « Builds lents sur architectures émulées »Construire une image arm64 sur un hôte x86_64 (ou vice versa) utilise QEMU pour émuler chaque instruction, ce qui peut être plusieurs fois plus lent qu’un build natif. Les générateurs atténuent ce problème en effectuant la résolution des dépendances en dehors du Dockerfile — voir Docker Bundling. Si vous constatez toujours des builds Docker lents :
- Assurez-vous d’exécuter les cibles
bundle/dockervia Nx (nx docker my-project) afin que le bundle soit mis en cache entre les exécutions. - Sur CI, envisagez un runner ARM natif (par exemple
ubuntu-24.04-armde GitHub Actions) pour éviter complètement QEMU.
Contexte de build manquant lors de cdk deploy / nx apply
Section intitulée « Contexte de build manquant lors de cdk deploy / nx apply »La cible docker générée écrit son contexte de build dans dist/packages/<project>/docker/... (Python) ou dist/packages/<project>/bundle/... (TypeScript), et l’infrastructure en tant que code générée pointe vers ce répertoire. Si ce répertoire n’existe pas lorsque vous synthétisez ou appliquez, vous verrez des erreurs comme ENOENT ou “directory does not exist”.
Les générateurs déclarent la cible docker comme dépendance de build, donc nx build (ou les cibles générées nx deploy / nx apply) produira le contexte de build avant que CDK ou Terraform ne s’exécute. Si vous invoquez cdk ou terraform directement, exécutez d’abord l’étape docker :
nx run my-project:dockerLectures complémentaires
Section intitulée « Lectures complémentaires »- Docker — Multi-platform builds
- Docker Bundling guide — le modèle que suivent les générateurs.