我希望能够编写脚本来管理Docker容器,但我发现将PS变量传递给Docker命令很困难,尤其是由于路径格式的差异。
以下代码 (*) 和类似代码可以在这里找到,虽然它们可行,但不太方便:
Start-Process docker " run --rm -v $($env:USERPROFILE -replace '\\','/'):/data alpine ls /data"
实际上,在需要查看弹出窗口并控制其可见性的MSI安装程序中,PS Start-Process
是完美的选择,以便了解静默安装正在进行。而在运行控制台应用程序时,尤其是在Docker中来回交互调用者和被调用的shell时,您不希望每次都启动一个新窗口。
要在PS中“运行命令、脚本或脚本块”,可以使用&
(也称为“调用运算符”)。有关详细信息,请参阅"Run a command, script, or script block"。但是,我曾试图这样做,但未成功:
& docker run --rm -v $($env:USERPROFILE -replace '\\','/'):/data alpine ls /data
Cmd.exe
或许会更加容易,但是PowerShell是与Docker for Windows交互的官方shell。因此,应该有一种可靠的方法来传递变量参数到Docker命令中。(*) 这里仅出于实验目的使用了删除开关
-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 -v B:\folder\otherfolder\:/home/folder ...
,这个映射起作用。 - 4c74356b41