7

我需要将 [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 容器的默认 shell 是什么?有没有办法将它设置为 PowerShell,所以我不必将“powershell”指定为ENTRYPOINTJSON 数组的第一个元素?我应该使用SHELLDockerfile 中的命令吗?
  2. 创建和运行容器大约需要 3-4 秒,这在某种程度上可以理解,但在 PS1 脚本完成后,容器退出并返回命令提示符需要将近 10 秒的时间。造成这种延迟的原因可能是什么?
4

1 回答 1

11

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

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

于 2018-04-16T11:52:32.447 回答