web-dev-qa-db-ja.com

PowerShellスクリプトをDockerコンテナーのエントリポイントとして指定するにはどうすればよいですか?

[Windows] Dockerコンテナーを実行可能ファイルとして実行し、かなり複雑なPowerShellスクリプト(Javaおよび.NETアプリケーションを呼び出します)を実行して終了します。 Dockerドキュメント を提案する必要がありますこの目的でENTRYPOINTを使用しているので、先に進み、次の内容のDockerfileを作成しました。

FROM Microsoft/dotnet-framework
COPY run.ps1 /
ENTRYPOINT [ "powershell.exe", "C:\\run.ps1" ]

run.ps1の内容(この質問では簡略化されています):

gci
write-Host "looks like everything is good!"

次に、次のコマンドを実行しました。

# Build the Docker image
docker build --rm -t testdockerps .

# Create/run container using above image
docker run -it testdockerps

コンテナは正常に実行され、C:\の内容に続いてメッセージlooks like everything is good!が表示されました。

私の観察結果に基づいて、いくつか質問があります。

  1. WindowsベースのDockerコンテナのデフォルトのシェルは何ですか? PowerShellに設定する方法はあるので、ENTRYPOINT JSON配列の最初の要素として「powershell」を指定する必要はありませんか? DockerfileでShellコマンドを使用する必要がありますか?
  2. コンテナーの作成と実行には約3〜4秒かかりますが、これはある程度理解できますが、PS1スクリプトが完了した後、コンテナーが終了してコマンドプロンプトに戻るまでに約10秒かかります。この遅延の原因は何ですか?
5
Web User

はい、DOCKERFILE Shell ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'Continue'; $verbosePreference='Continue';"]の上に以下のようにデフォルトのシェルとしてpowershellを指定できます

VMをスピンダウンするのにかかる時間について何でもできるとは思いません

2