Maison >développement back-end >Golang >Pourquoi mon image Scratch Docker renvoie-t-elle « aucun fichier ou répertoire de ce type » lors de l'exécution d'un binaire personnalisé ?

Pourquoi mon image Scratch Docker renvoie-t-elle « aucun fichier ou répertoire de ce type » lors de l'exécution d'un binaire personnalisé ?

DDD
DDDoriginal
2024-12-15 00:21:15650parcourir

Why Does My Docker Scratch Image Return

"aucun fichier ou répertoire de ce type" avec Docker Scratch Image

Lors de la tentative de création d'un conteneur Docker à l'aide d'une image scratch et d'un binaire personnalisé , les utilisateurs peuvent rencontrer l'erreur suivante : "standard_init_linux.go:207 : le processus utilisateur exec a provoqué "aucun fichier ou répertoire de ce type"". Cette erreur indique que le fichier binaire est introuvable ou exécuté dans le conteneur.

Le problème provient de l'utilisation de l'instruction "FROM scratch" dans le Dockerfile. Une image scratch est une image minimale qui ne contient que les outils essentiels, ce qui donne un conteneur léger et efficace. Cependant, cela signifie également que le conteneur ne dispose pas de certaines bibliothèques et dépendances qui peuvent être nécessaires au fonctionnement du binaire.

Pour résoudre ce problème, les utilisateurs peuvent opter pour l'une des deux approches suivantes :

  1. Désactiver CGO : CGO permet aux programmes Go de s'interfacer avec le code C, mais cela peut conduire à une liaison dynamique du binaire avec les bibliothèques système. En désactivant CGO, les utilisateurs peuvent garantir que le binaire est lié statiquement, éliminant ainsi la dépendance à l'égard de bibliothèques spécifiques.

    RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
        -ldflags="-w -s" -o $PROJ_BIN_PATH ./cmd/...
  2. Copier les bibliothèques : si CGO est essentiel pour le binaire, les utilisateurs peuvent copier manuellement les bibliothèques nécessaires dans l'image de travail à l'aide de l'instruction "COPY --from". Cela garantit que le binaire a accès aux dépendances requises au moment de l'exécution.

    COPY --from=build-image /usr/lib/libc.so.6 /usr/lib/libc.so.6

L'approche spécifique choisie dépendra des exigences du binaire et du niveau souhaité d'isolation du conteneur. En résolvant le problème des liaisons dynamiques ou de la disponibilité des dépendances, les utilisateurs peuvent créer et exécuter avec succès des conteneurs basés sur des images de travail avec des binaires personnalisés.

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