ホームページ > バックエンド開発 > Golang > カスタム バイナリを実行すると、Docker Scratch イメージが「no such file or directory」を返すのはなぜですか?

カスタム バイナリを実行すると、Docker Scratch イメージが「no such file or directory」を返すのはなぜですか?

DDD
リリース: 2024-12-15 00:21:15
オリジナル
651 人が閲覧しました

Why Does My Docker Scratch Image Return

Docker Scratch Image で「そのようなファイルまたはディレクトリはありません」

スクラッチ イメージとカスタム バイナリを使用して Docker コンテナを作成しようとした場合、ユーザーは次のエラーに遭遇する可能性があります:「standard_init_linux.go:207: exec ユーザー プロセスにより "そのようなファイルまたはディレクトリはありません""。このエラーは、バイナリ ファイルがコンテナ内で見つからないか、実行できないことを示します。

この問題は、Dockerfile での「FROMScratch」命令の使用に起因します。スクラッチ イメージは、必要なツールのみを含む最小限のイメージであり、軽量で効率的なコンテナーになります。ただし、これは、バイナリの実行に必要な特定のライブラリや依存関係がコンテナに欠けていることも意味します。

この問題を解決するには、ユーザーは 2 つのアプローチのいずれかを選択できます:

  1. CGO を無効にする: CGO を使用すると、Go プログラムが C コードとインターフェイスできるようになりますが、CGO の動的リンクが発生する可能性があります。システムライブラリを含むバイナリ。 CGO を無効にすることで、ユーザーはバイナリが静的にリンクされ、特定のライブラリへの依存関係を排除できます。

    RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
        -ldflags="-w -s" -o $PROJ_BIN_PATH ./cmd/...
    ログイン後にコピー
  2. ライブラリのコピー: 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート