我想编写Docker容器管理的脚本,但是我发现很难将PS变量传递给Docker命令,特别是由于路径格式的差异。
以下行(*)和您可以在此处找到的赞都可以 使用,但是很不方便:
Start-Process docker " run --rm -v $($env:USERPROFILE -replace '\\','/'):/data alpine ls /data"
的确,PS Start- Process非常适合MSI安装程序,您需要查看弹出窗口并控制其可见性级别,以便了解无提示安装程序正在运行。取而代之的是,您不想每次运行控制台应用程序时都启动一个新窗口,尤其是在Docker中,在其中您与调用程序和被调用shell来回交互。
Start- Process
PS&为“运行命令,脚本或脚本块”特别提供了“调用操作符,也称为’调用操作符’”。但是,我尝试使用以下方法未成功:
&
& docker run --rm -v $($env:USERPROFILE -replace '\\','/'):/data alpine ls /data
Cmd.exe也许会使事情变得更容易,但是PowerShell是与Docker for Windows交互的官方shell 。因此,应该有一种可靠的方式将变量参数传递给Docker命令。
Cmd.exe
(*)-rm此处,remove开关仅用于试验答案以避免混乱工作空间的目的。当然,我通常不会在创建容器后立即销毁它,而是与它经过的容器进行交互 -ti。
-rm
-ti
编辑
@AnsgarWiechers 在评论中建议使用参数展开:
$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'.
不需要参数拼写甚至调用运算符,双引号可以解决:
docker run --rm -v "$($env:USERPROFILE -replace '\\','/'):/data" alpine ls /data