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

rob*_*liv 5 powershell docker devops powershell-core docker-run

我需要使用官方的 PowerShell Core Docker 映像来运行 Docker 容器并使其执行 PowerShell 脚本文件。

我知道可以使用 Dockerfile 和 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
Run Code Online (Sandbox Code Playgroud)

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

我觉得pwsh还应该指定二进制文件,但找不到如何执行此操作的方法。

use*_*688 6

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

这会产生Hello, World

mcr.microsoft.com/powershell谷歌返回的内容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)
Run Code Online (Sandbox Code Playgroud)
  • 或者,如果您尝试将主机文件传递到容器中并执行,您可以将本地路径映射到容器内部的路径,而不是:
docker run -v /tmp/localdata:/tmp/containerdata  -it --rm mcr.microsoft.com/powershell pwsh /tmp/containerdata/test.ps
Run Code Online (Sandbox Code Playgroud)

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

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