gpt4 book ai didi

当从 linux 样式路径转换时,Docker 安装的卷将 ;C 添加到 Windows 路径的末尾

转载 作者:IT老高 更新时间:2023-10-28 12:35:15 26 4
gpt4 key购买 nike

尝试在 Windows 上挂载 docker 镜像时,我发现了一些有趣的怪事。

我创建了一个 .sh 脚本,它装载项目文件夹以运行我们的开发人员环境镜像。我想要一个每个开发人员都可以运行的脚本,无论他们的机器如何。它所做的只是使用当前项目文件夹运行 docker。

#!/usr/bin/env bash
docker run -it --rm -v D:\my\project\folder:/wkDir $IMAGE_TAG yarn dev

运行正常。现在计划是从 npm 调用这个脚本,所以我希望它能够相对于当前文件夹工作。让我们试试另一个版本。

docker run -it --rm -v $PWD:/wkDir $IMAGE_TAG yarn dev

失败:

C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from 
daemon: Mount denied:
The source path "D:/my/project/folder;C"
doesn't exist and is not known to Docker.

笏。 ;C 是什么,它从何而来?

所以我做了 echo $PWD 这给了我 /d/my/project/folder

有趣,所以 $PWD 解析为 linux 路径格式的正确路径,似乎 docker 正试图从该路径转换为正确的 windows 路径,除了有这个 ;C 突然出现。而 \/...

这里到底发生了什么?

我在 VSCode 的终端 git bash 和 powershell 中得到了相同的结果。

更新:我注意到在 VSCode 的 powershell 终端中运行 .sh 会打开一个单独的 cmd.exe 控制台窗口,该窗口似乎在 git bash 中运行脚本。所以这可能是一个 git bash 问题。

最佳答案

所以通过一些额外的挖掘,我发现了这三个线程,与 git-bash 破坏 docker mount 相关:

https://forums.docker.com/t/weird-error-under-git-bash-msys-solved/9210 https://github.com/moby/moby/issues/24029#issuecomment-250412919

当我查看 mingw 关于 git-bash 使用的路径转换的文档时,我发现了这个语法表: http://www.mingw.org/wiki/Posix_path_conversion

其中一个输出格式为:x;x;C:\MinGW\msys\1.0\x。注意其中的 ;C。如果 git-bash 试图变得聪明,填充语法并以这种格式输出路径,这将解释它。

解决办法是通过/前缀来转义路径转换。因此,使用当前工作目录从 git-bash 运行 docker 的工作 docker 命令:

docker run -it --rm -v /${PWD}:/wkDir $IMAGE_TAG yarn dev

关于当从 linux 样式路径转换时,Docker 安装的卷将 ;C 添加到 Windows 路径的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50608301/

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