Docker Scratch Image で「そのようなファイルまたはディレクトリはありません」
スクラッチ イメージとカスタム バイナリを使用して Docker コンテナを作成しようとした場合、ユーザーは次のエラーに遭遇する可能性があります:「standard_init_linux.go:207: exec ユーザー プロセスにより "そのようなファイルまたはディレクトリはありません""。このエラーは、バイナリ ファイルがコンテナ内で見つからないか、実行できないことを示します。
この問題は、Dockerfile での「FROMScratch」命令の使用に起因します。スクラッチ イメージは、必要なツールのみを含む最小限のイメージであり、軽量で効率的なコンテナーになります。ただし、これは、バイナリの実行に必要な特定のライブラリや依存関係がコンテナに欠けていることも意味します。
この問題を解決するには、ユーザーは 2 つのアプローチのいずれかを選択できます:
CGO を無効にする: CGO を使用すると、Go プログラムが C コードとインターフェイスできるようになりますが、CGO の動的リンクが発生する可能性があります。システムライブラリを含むバイナリ。 CGO を無効にすることで、ユーザーはバイナリが静的にリンクされ、特定のライブラリへの依存関係を排除できます。
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ -ldflags="-w -s" -o $PROJ_BIN_PATH ./cmd/...
ライブラリのコピー: CGO が必要な場合ユーザーは、「COPY --from」命令を使用して、必要なライブラリをスクラッチ イメージに手動でコピーできます。これにより、実行時にバイナリが必要な依存関係に確実にアクセスできるようになります。
COPY --from=build-image /usr/lib/libc.so.6 /usr/lib/libc.so.6
選択される具体的なアプローチは、バイナリの要件と必要なコンテナ分離レベルによって異なります。動的リンクや依存関係の可用性に関する問題に対処することで、ユーザーはカスタム バイナリを使用したスクラッチ イメージに基づいてコンテナを正常に作成して実行できるようになります。
以上がカスタム バイナリを実行すると、Docker Scratch イメージが「no such file or directory」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。