如何将PowerShell脚本指定为Docker容器入口点?

Web*_*ser 4 powershell docker docker-for-windows docker-entrypoint

我需要将[Windows] Docker容器作为可执行文件运行,运行相当复杂的PowerShell脚本(调用Java和.NET应用程序)并退出。Docker文档建议ENTRYPOINT用于此目的。因此,我继续创建了一个包含以下内容的Dockerfile:

FROM microsoft/dotnet-framework
COPY run.ps1 /
ENTRYPOINT [ "powershell.exe", "C:\\run.ps1" ]
Run Code Online (Sandbox Code Playgroud)

的内容run.ps1(此问题的超级简化):

gci
write-host "looks like everything is good!"
Run Code Online (Sandbox Code Playgroud)

然后,我运行了以下命令:

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

# Create/run container using above image
docker run -it testdockerps
Run Code Online (Sandbox Code Playgroud)

容器成功运行,显示的内容,C:\后跟消息- looks like everything is good!

根据我的观察,我有几个问题:

  1. 基于Windows的Docker容器的默认外壳是什么?有什么方法可以将其设置为PowerShell,因此我不必将“ powershell”指定为ENTRYPOINTJSON数组的第一个元素?我应该SHELL在Dockerfile中使用命令吗?
  2. 创建和运行容器大约需要3-4秒,这在一定程度上是可以理解的,但是在PS1脚本完成后,容器退出并返回命令提示符大约需要花费10秒的时间。延迟的原因可能是什么?

Gre*_*ian 5

是的,您可以将powershell指定为默认外壳,例如下面的DOCKERFILE顶部 SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'Continue'; $verbosePreference='Continue';"]

我不确定您是否可以采取任何措施关闭虚拟机

  • 下面对我有用输出“ hello” (2认同)