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

时间:2018-04-16 07:04:50

标签: powershell docker docker-windows docker-entrypoint

我需要运行一个[Windows] Docker容器作为可执行文件,运行一个相当复杂的PowerShell脚本(调用Java和.NET应用程序)并退出。 Docker documentation建议将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容器的默认shell是什么?有没有办法将它设置为PowerShell,所以我不必指定“powershell”作为ENTRYPOINT JSON数组的第一个元素?我应该在Dockerfile中使用SHELL命令吗?
  2. 创建和运行容器大约需要3-4秒,这在某种程度上是可以理解的,但在PS1脚本完成后,容器退出并返回命令提示符几乎需要10秒钟。造成这种延误的原因可能是什么?

1 个答案:

答案 0 :(得分:3)

是的,您可以在DOCKERFILE之上将powershell指定为默认shell,如下所示 SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'Continue'; $verbosePreference='Continue';"]

我不确定您是否可以对关闭虚拟机的时间做任何事情