Dockerスクラップコンテナはシェルなしで自分のアプリケーションをどのように実行できますか?

Dockerスクラップコンテナはシェルなしで自分のアプリケーションをどのように実行できますか?

このscratchイメージに基づくDockerコンテナにはシェルはありません。

それでは、私が入れたバイナリはどのように実行されますか?

答え1

シェルは、シェルスクリプトを実行したりインタラクティブシェルセッションを提供するためにのみ必要です。バイナリを実行するコンテナには、これらの項目は必要ありません。指定されたバイナリを実行します。エントリポイント(形式で指定した場合exec)シェルを使用しません。

コンテナ設定にはシェルは必要ありません。シェルには特別なものはなく、他のものと同様にバイナリです。コンテナランタイムは、バイナリが実行されるコンテナの「コンテキスト」を設定します。

シェルなしでコンテナをビルドして実行できるようにするには、実行コマンド(ENTRYPOINT上記のように、RUNなど)すべてexecテーブルを使用します。つまり

ENTRYPOINT ["executable", "arg1", "arg2"]

シェル型の代わりに

ENTRYPOINT executable arg1 arg2

後者はシェルに依存し/bin/sh(またはシェルが設定されている場合SHELL)、利用できない場合は失敗します。

シェルが不要であることに加えて、このexec形式には多くの利点があります。特に、信号処理を簡素化し、多くのシェル解析トラップを回避します。

関連情報