gpt4 book ai didi

powershell - 如何有条件地包括安装卷

转载 作者:行者123 更新时间:2023-12-02 18:38:11 26 4
gpt4 key购买 nike

我有一个docker run命令,看起来像这样:

docker run `
-v C:\some\dir:/root/some/dir

我想做的是仅在存在 C:\some\dir的情况下包括卷装载,但是我似乎无法正确获取PowerShell语法。

我尝试了以下操作,但一直获取 "C:\\some\\dir\\" is not a valid windows path。为了清楚起见,我将使用真实世界的代码。
$awsPath = $null
if(Test-Path ~/.aws) {
$awsPath = Resolve-Path ~/.aws
$aws_mount = "-v ${awsPath}:/root/aws"
}

docker run `
$awsPath

任何帮助,将不胜感激。

最佳答案

Docker中的反斜杠字符是转义字符。我认为Docker试图通过添加双斜杠来解决这个问题,以使您能够逃脱反斜杠。在我变通的过程中,我很幸运地使用斜杠而不是反斜杠,PowerShell在使用路径名时会理解斜杠。

请参见下面的示例代码:

$awsPath = "c:\temp\aws"

if (Test-Path -Path $awsPath) {
# Escape the backslash here as the backslash is the escape char in regex also
$dockerAwsPath = $awsPath -replace "\\", "/"
docker run --rm -v ${dockerAwsPath}:/root/aws busybox ls -a /root/aws/
} else {
docker run --rm busybox ls -a /root
}

并输出:
.
..

现在我创建文件夹:
New-Item -Path $awsPath -ItemType Directory | Out-Null
"Hello" | Out-File -FilePath "$awsPath/hello.txt"

if (Test-Path -Path $awsPath) {
# Escape the backslash here as the backslash is the escape char in regex also
$dockerAwsPath = $awsPath -replace "\\", "/"
docker run --rm -v ${dockerAwsPath}:/root/aws busybox ls -a /root/aws/
} else {
docker run --rm busybox ls -a /root
}

和输出:
.
..
hello.txt

因此,Powershell / Docker都理解以下路径:
PS C:\temp> $dockerAwsPath
c:/temp/aws

如果使用Dockerfile,则 here包含一些有关将转义符更改为其他内容的详细信息。我还没有尝试过,但是它可以作为另一个解决方案。

关于powershell - 如何有条件地包括安装卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51547283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com