Docker bare“在非引号字段中

t30tvxxf  于 2023-05-16  发布在  Docker
关注(0)|答案(1)|浏览(257)

我有一个Docker脚本,我已经使用了一段时间来编译js和css。我买了一台新的笔记本电脑,现在完全相同的脚本抛出了这个错误:

Running npm run build
invalid argument 
"type=bind,source=\"$path\\src/MyProject/wwwroot/dist\",dst=/work/wwwroot/dist" for "--mount" flag: parse error on line 1, column 18: bare " in non-quoted-field
See 'docker run --help'.

运行docker的实际脚本:

param (
    [string]$target = "build"
)    

Write-Host "Running npm run $target"
$path = (Get-Item -Path ".\").FullName

docker run -it --memory="500m" --memory-swap="1g" --rm `
                --mount type=bind,src="$path\src/MyProject/wwwroot/dist",dst=/work/wwwroot/dist `
                --mount type=bind,src="$path\src/MyProject/fed/dist",dst=/work/fed/dist `
                --mount type=bind,src="$path\src/MyProject/fed/.storybook",dst=/work/fed/.storybook `
                --mount type=bind,src="$path\src/MyProject/fed/src",dst=/work/fed/src `
                mytag npm run $target

那么,如果这在我的旧笔记本电脑上工作,为什么我突然得到这个错误?某种PowerShell插件(这就是我如何触发此)?
这是由Powershell .Net Core 7触发的。在WSL之上使用Docker Desktop

更新

我很确定这与Powershell .Net Core有关。该脚本在Windows PowerShell中工作正常。
这是某种背景吗

axr492tv

axr492tv1#

此问题是由于PowerShell 7.3中的一个重大更改造成的:
某些本机命令需要包含引号字符的参数。PowerShell 7.3更改了命令行解析原生命令的方式。
恢复原始行为的最快解决方法是:

$PSNativeCommandArgumentPassing = 'legacy'

一般来说,用Start-Processcmdlet重写本机命令似乎是最好的方法。

相关问题