Heim >Backend-Entwicklung >Golang >Warum gibt mein Docker-Scratch-Image beim Ausführen einer benutzerdefinierten Binärdatei „keine solche Datei oder kein solches Verzeichnis' zurück?

Warum gibt mein Docker-Scratch-Image beim Ausführen einer benutzerdefinierten Binärdatei „keine solche Datei oder kein solches Verzeichnis' zurück?

DDD
DDDOriginal
2024-12-15 00:21:15654Durchsuche

Why Does My Docker Scratch Image Return

„Keine solche Datei oder kein solches Verzeichnis“ mit Docker Scratch Image

Beim Versuch, einen Docker-Container mit einem Scratch-Image und einer benutzerdefinierten Binärdatei zu erstellen , können Benutzer auf den folgenden Fehler stoßen: „standard_init_linux.go:207: exec-Benutzerprozess verursacht „keine solche Datei oder kein solches Verzeichnis““. Dieser Fehler weist darauf hin, dass die Binärdatei nicht im Container gefunden oder ausgeführt werden kann.

Das Problem ergibt sich aus der Verwendung der „FROM Scratch“-Anweisung in der Docker-Datei. Ein Scratch-Image ist ein minimales Image, das nur wesentliche Werkzeuge enthält, was zu einem leichten und effizienten Container führt. Dies bedeutet jedoch auch, dass dem Container bestimmte Bibliotheken und Abhängigkeiten fehlen, die möglicherweise für die Ausführung der Binärdatei erforderlich sind.

Um dieses Problem zu beheben, können Benutzer einen von zwei Ansätzen wählen:

  1. CGO deaktivieren: CGO ermöglicht Go-Programmen die Schnittstelle mit C-Code, kann jedoch zu einer dynamischen Verknüpfung der Binärdatei mit Systembibliotheken führen. Durch Deaktivieren von CGO können Benutzer sicherstellen, dass die Binärdatei statisch verknüpft ist, wodurch die Abhängigkeit von bestimmten Bibliotheken beseitigt wird.

    RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
        -ldflags="-w -s" -o $PROJ_BIN_PATH ./cmd/...
  2. Bibliotheken kopieren: Wenn CGO unerlässlich ist für In der Binärdatei können Benutzer die erforderlichen Bibliotheken mithilfe der Anweisung „COPY --from“ manuell in das Scratch-Image kopieren. Dadurch wird sichergestellt, dass die Binärdatei zur Laufzeit Zugriff auf die erforderlichen Abhängigkeiten hat.

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

Der gewählte spezifische Ansatz hängt von den Anforderungen der Binärdatei und dem gewünschten Grad der Containerisolation ab. Durch die Behebung des Problems mit dynamischer Verknüpfung oder Abhängigkeitsverfügbarkeit können Benutzer erfolgreich Container basierend auf Scratch-Images mit benutzerdefinierten Binärdateien erstellen und ausführen.

Das obige ist der detaillierte Inhalt vonWarum gibt mein Docker-Scratch-Image beim Ausführen einer benutzerdefinierten Binärdatei „keine solche Datei oder kein solches Verzeichnis' zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn