如何使用 docker 运行 命令执行 ps1 脚本?

How to execute ps1 script using docker run command?

我需要使用官方 PowerShell Core Docker 映像到 运行 一个 Docker 容器并让它执行一个 PowerShell 脚本文件。

我知道可以使用 Docker 文件和 Docker 构建来完成,但在这种情况下不能使用它。

通过阅读文档我想出了这个,但它似乎不起作用:

docker run -it --rm --entrypoint "/tmp/test.ps1" repo/powershell:latest

docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"/tmp/test.ps1\": stat /tmp/test.ps1: no such file or directory": unknown.
ERRO[0001] error waiting for container: context canceled

错误似乎是说它找不到文件,但是当手动 运行ning stat "/tmp/test.ps1" 时它工作正常。

我觉得二进制文件 pwsh 也应该指定,但找不到具体方法。

docker run -it mcr.microsoft.com/powershell pwsh -c "Write-Host 'Hello, World'"

这会产生 Hello, World

mcr.microsoft.com/powershell 是 google return 和 official PowerShell Core Docker image

此图像中没有文件 /tmp/test.ps1。所以不太清楚图像 repo/powershell:latest 里面有什么。

  • 如果您尝试读取文件并在 docker 内部执行,那么这对我来说工作得很好:
docker run -it --rm mcr.microsoft.com/powershell pwsh -c $(cat test.ps)
  • 或者,如果您尝试将主机文件传递到容器中并执行,您可以将本地路径映射到容器内部的路径,而不是:
docker run -v /tmp/localdata:/tmp/containerdata  -it --rm mcr.microsoft.com/powershell pwsh /tmp/containerdata/test.ps

假设您在主机 /tmp/localdata 上有一个文件夹,其中包含带有 Write-Host 'Hello, World!' 文本的 test.ps 文件。

两种方式的结果都是Hello, World