ホームページ >バックエンド開発 >Golang >Docker Scratch イメージの「そのようなファイルまたはディレクトリはありません」エラーを解決する方法?

Docker Scratch イメージの「そのようなファイルまたはディレクトリはありません」エラーを解決する方法?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-17 16:15:10506ブラウズ

How to Solve

Docker Scratch Image での「そのようなファイルまたはディレクトリはありません」エラーのトラブルシューティング

「そのようなファイルまたはディレクトリはありません」というイライラするエラー メッセージが表示される場合がありますDocker スクラッチ イメージを操作しているとき。このエラーは通常、バイナリ名と実際の名前の不一致、または必須ライブラリへのダイナミック リンクの欠落を示します。

Docker スクラッチ イメージでは、バイナリはベース イメージからコピーされることがよくあります。提供された Dockerfile に示されているように、スクラッチ イメージは、/etc/passwd やバイナリ $PROJ_BIN_PATH などの重要なファイルをベース イメージからコピーすることによって構築されます。ただし、このエラーを解決するには、CGO_ENABLED=0 ディレクティブを使用して CGO (C Go) を無効にすることが不可欠です。

CGO を有効にすると、libc や libmusl などのライブラリへの動的リンクが作成され、これらの場合にエラーが発生します。ライブラリはスクラッチ イメージでは使用できません。 CGO を無効にすると、静的にコンパイルされたバイナリが作成され、外部ライブラリ参照が不要になります。

この解決策を使用してエラーを修正するには、既存の RUN GOOS=linux GOARCH=amd64 go build コマンドを次のコマンドに置き換えます。 Dockerfile:

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

これにより、バイナリが静的にコンパイルされ、外部ライブラリに依存せずに解決されます。 「そのようなファイルまたはディレクトリはありません」エラー。

また、提供されたソリューションで提案されているように、Docker 内で ldd コマンドを利用して動的リンクをチェックすることもできます。 docker build --target=0 -t your_go_image を実行します。その後 docker run -it --rm your_go_image ldd /$PROJ_NAME を実行すると、バイナリの動的な依存関係を調べて、不足している可能性のあるライブラリを特定できます。

以上がDocker Scratch イメージの「そのようなファイルまたはディレクトリはありません」エラーを解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。