Heim > Backend-Entwicklung > Golang > Wie behebt man den Fehler „Keine solche Datei oder kein solches Verzeichnis' in Docker Scratch Images?

Wie behebt man den Fehler „Keine solche Datei oder kein solches Verzeichnis' in Docker Scratch Images?

Barbara Streisand
Freigeben: 2024-12-17 16:15:10
Original
501 Leute haben es durchsucht

How to Solve

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

Die frustrierende Fehlermeldung „Keine solche Datei oder kein solches Verzeichnis“ kann auftreten während der Arbeit mit Docker-Scratch-Images. Dieser Fehler weist typischerweise auf eine Nichtübereinstimmung zwischen dem Binärnamen und seinem tatsächlichen Namen oder auf einen fehlenden dynamischen Link zu einer wichtigen Bibliothek hin.

In Docker-Scratch-Images werden Binärdateien oft von einem Basis-Image kopiert. Wie in der bereitgestellten Docker-Datei dargestellt, wird ein Scratch-Image erstellt, indem wichtige Dateien wie /etc/passwd und die Binärdatei $PROJ_BIN_PATH aus einem Basis-Image kopiert werden. Um diesen Fehler zu beheben, ist es jedoch wichtig, CGO (C Go) mit der Direktive CGO_ENABLED=0 zu deaktivieren.

Wenn CGO aktiviert ist, können dynamische Links zu Bibliotheken wie libc oder libmusl erstellt werden, was bei diesen zu Fehlern führt Bibliotheken sind im Scratch-Image nicht verfügbar. Durch die Deaktivierung von CGO werden statisch kompilierte Binärdateien erstellt, sodass keine externen Bibliotheksverweise mehr erforderlich sind.

Um den Fehler mit dieser Lösung zu beheben, ersetzen Sie den vorhandenen Befehl RUN GOOS=linux GOARCH=amd64 go build durch den folgenden in Ihrem Dockerfile:

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

Dadurch wird sichergestellt, dass Ihre Binärdatei statisch kompiliert wird und nicht von externen Bibliotheken abhängig ist, wodurch die Fehlermeldung „Keine solche Datei“ behoben wird oder Verzeichnis"-Fehler.

Alternativ können Sie nach dynamischen Links suchen, indem Sie den Befehl ldd in Docker nutzen, wie in der bereitgestellten Lösung vorgeschlagen. Durch Ausführen von docker build --target=0 -t your_go_image . und dann docker run -it --rm your_go_image ldd /$PROJ_NAME, können Sie die dynamischen Abhängigkeiten Ihrer Binärdatei untersuchen und alle potenziell fehlenden Bibliotheken identifizieren.

Das obige ist der detaillierte Inhalt vonWie behebt man den Fehler „Keine solche Datei oder kein solches Verzeichnis' in Docker Scratch Images?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage