Docker スクラッチ イメージでの「そのようなファイルまたはディレクトリはありません」エラーのトラブルシューティング
スクラッチ ベース イメージを使用して Docker イメージを構築する場合、次のような問題が発生する可能性があります。 「standard_init_linux.go:207: exec user process原因の「そのようなファイルまたはディレクトリはありません」」というエラーが発生します。この問題は、特定の依存関係またはライブラリがスクラッチ イメージで使用できない場合に発生する可能性があります。
考えられる原因
このエラーは通常、バイナリ実行可能ファイルが見つからないか、名前が不適切であることを示します。 。あるいは、バイナリがスクラッチ イメージに存在しないライブラリに動的にリンクされていることを意味する可能性があります。
解決策: CGO を無効にします
この問題を解決するには、次のようにします。 Go ビルド プロセス中に CGO (C Go) を無効にすることを検討してください。 CGO は、Go プログラムがネイティブ C コードと対話できるようにする機能ですが、C 標準ライブラリ (libc) への動的リンクが発生する可能性があります。
CGO を無効にすることで、バイナリが静的にリンクされるようになります。外部依存関係。次のコマンドを使用して CGO を無効にします:
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ -ldflags="-w -s" -o $PROJ_BIN_PATH ./cmd/...
動的リンクの確認
イメージを構築した後、ldd コマンドを使用して動的リンクを確認できます。バイナリ:
docker build --target=0 -t your_go_image . docker run -it --rm your_go_image ldd /$PROJ_NAME
ldd の出力が動的リンクを示している場合は、次のことが必要になる場合があります。これらの依存関係を調査し、それらが Docker イメージに含まれていることを確認します。
以上がDocker Scratch イメージの使用時に発生する「そのようなファイルまたはディレクトリはありません」エラーを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。