我想编写Docker容器的管理脚本,但我发现很难将PS变量传递给Docker命令,特别是由于路径格式不同。
以下行(*)和您可以找到的here之类的内容确实有效,但不方便:
Start-Process docker " run --rm -v $($env:USERPROFILE -replace '\\','/'):/data alpine ls /data"
事实上,PS Start-Process
非常适合MSI安装程序,您需要查看弹出窗口并控制其可见性级别,以便了解静默安装程序的运行情况。相反,您不希望每次运行控制台应用程序时都启动新窗口,特别是在Docker中,您可以在其中与来电者和被叫shell进行来回互动。
& docker run --rm -v $($env:USERPROFILE -replace '\\','/'):/data alpine ls /data
Cmd.exe
可能会使事情变得更容易,但PowerShell是与Docker for Windows交互的官方shell。因此,应该有一种可靠的方法将变量参数传递给Docker命令。
(*)此处使用移除开关-rm
仅用于尝试避免使工作区混乱的答案。当然,我通常不会在创建容器时立即销毁它,而是通过-ti
与它进行交互。
修改
@AnsgarWiechers在评论中提出parameters splatting:
$params = 'run', '--rm', "-v $($env:USERPROFILE -replace '\\','/'):/data", 'alpine', 'ls /data'
docker @params
假设我正确地实施它,它也不起作用并给出:
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: invalid mode: /data.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
答案 0 :(得分:3)
不需要参数splatting甚至是调用操作符,双引号求解:
docker run --rm -v "$($env:USERPROFILE -replace '\\','/'):/data" alpine ls /data