Maison >développement back-end >Golang >Comment résoudre les erreurs « aucun fichier ou répertoire de ce type » dans les images Scratch Docker ?

Comment résoudre les erreurs « aucun fichier ou répertoire de ce type » dans les images Scratch Docker ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-17 16:15:10506parcourir

How to Solve

Dépannage de l'erreur « Aucun fichier ou répertoire de ce type » avec l'image Docker Scratch

Le message d'erreur frustrant « Aucun fichier ou répertoire de ce type » peut apparaître tout en travaillant avec des images de travail Docker. Cette erreur indique généralement une incompatibilité entre le nom du binaire et son nom réel, ou un lien dynamique manquant vers une bibliothèque essentielle.

Dans les images scratch Docker, les binaires sont souvent copiés à partir d'une image de base. Comme illustré dans le Dockerfile fourni, une image de travail est créée en copiant des fichiers essentiels tels que /etc/passwd et le binaire $PROJ_BIN_PATH à partir d'une image de base. Cependant, pour résoudre cette erreur, il est essentiel de désactiver CGO (C Go) à l'aide de la directive CGO_ENABLED=0.

Avec CGO activé, des liens dynamiques vers des bibliothèques comme libc ou libmusl peuvent être créés, entraînant des erreurs lorsque ces les bibliothèques ne sont pas disponibles dans l'image de travail. En désactivant CGO, des binaires compilés statiquement sont créés, éliminant ainsi le besoin de références de bibliothèques externes.

Pour corriger l'erreur à l'aide de cette solution, remplacez la commande RUN GOOS=linux GOARCH=amd64 go build existante par ce qui suit dans votre Dockerfile :

RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
    -ldflags="-w -s" -o $PROJ_BIN_PATH ./cmd/...

Cela garantira que votre binaire est compilé de manière statique et ne dépendra pas de bibliothèques externes, résolvant ainsi le problème "aucun fichier ou répertoire de ce type" erreur.

Vous pouvez également vérifier les liens dynamiques en utilisant la commande ldd dans Docker, comme suggéré dans la solution fournie. En exécutant docker build --target=0 -t your_go_image . puis docker run -it --rm your_go_image ldd /$PROJ_NAME, vous pouvez examiner les dépendances dynamiques de votre binaire et identifier les bibliothèques manquantes potentielles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn