当前位置: 首页 > 面试题库 >

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

万开畅
2023-03-14
问题内容

尝试在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中得到了相同的结果。

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


问题答案:

因此,通过一些额外的挖掘,我发现了这三个线程,与git-bash破坏Docker挂载有关:

https://forums.docker.com/t/weird-error-under-git-bash-msys-solved/9210


https://github.com/moby/moby/issues/24029#issuecomment-250412919

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

其中之一以以下格式输出:x;x;C:\MinGW\msys\1.0\x。注意;C其中。如果git-
bash试图变得更聪明,则填充语法并以这种格式输出路径,这将对此进行解释。

解决方案是使用前缀来逃避路径转换/。因此,工作中的docker命令从git-bash使用当前工作目录运行docker

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


 类似资料:
  • 在Windows上安装docker映像时,我发现了一些有趣的怪异之处。 我创建了一个脚本,用于挂载project文件夹以运行我们的开发人员环境映像。我想要一个脚本,每个开发人员都可以运行,不管他们的机器。它所做的只是使用当前项目文件夹运行docker。 失败原因: 水。什么是?它从何而来?

  • 我对docker比较陌生。我想使用一个有卷的数据库来持久化。我在windows 10中。 我想检查在我的机器中创建的卷。 当我运行命令时 因为这是一个windows框,所以我没有文件夹/var/lib/docker/volumes/。windows中的volumn文件夹具体在哪里,以便我可以在需要时备份它。

  • 我想在共享主机中安装laravel,我遵循了这里的步骤https://stackoverflow.com/a/28449523 但是我的资产路径不包括公共目录 而不是这个 我明白了 如何在不更改任何核心类的情况下更改资产文件夹的目录(将public添加到资产)?

  • 问题内容: 我有文件A的绝对路径。 我有一个从文件A的目录到文件B的相对路径。此路径可以并且将使用“ ..”以任意复杂的方式向上移动目录结构。 范例A: 示例B: 我如何结合这两者以获得 最简单的 绝对路径到文件B? 问题答案: 如果我的问题正确,那么您可以执行以下操作:

  • 问题内容: 我想在Linux PATH中添加一个小脚本,因此不必在实际放置在磁盘上的地方实际运行它。 该脚本非常简单,它是关于通过代理赋予apt-get访问权限的,我使它像这样: 然后,我将其保存为apt-proxy.sh,将其设置为+ x(chmod),当我位于该文件所在的目录中时,一切正常。 我的问题是:如何将此 apt-proxy 添加到 PATH, 以便实际上可以将其称为真正的apt-ge

  • 问题内容: 我试图找出为什么找不到使用using安装的我和/或包装器。我认为是因为它没有添加到我的PATH中: 和: 我安装使用PIP和使用,没有任何问题。我尝试重新安装,但这也没有用。我如何知道要添加的路径?只是似乎安装到的路径?那似乎是: 我还找到了本指南,该指南建议: 但是,这并不能帮助我运行。我在Mac OSX 10.7.5(Lion)上。 问题答案: 似乎我自己是几乎所有“简单”安装过程