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