资讯专栏INFORMATION COLUMN

Docker 排坑之旅(一):windows下不能挂载文件夹进container

awesome23 / 2022人阅读

摘要:准备工作在的文件夹下新建文件夹,命名为,这个就是我们想挂载的文件夹。试试看绝对路径获得如下错误错误看上去差不多,文件路径识别的问题。错误分析既然是在下使用命令,而正常的或者不能正确运行。的高分解答表示,在前加可以实现跳过的书写转义规定。

版权所有,转载请注明出处。
准备工作

在windows的user文件夹下新建文件夹,命名为DockerPackages,这个就是我们想挂载的文件夹。

错误重现

测试环境:

docker 版本: 18.09.0  
windows 版本:win10,用HyperV
命令行工具:git-bash git version 2.19.1.windows.1

使用下列方式mount volume,会出现问题

使用HOME

winpty docker run -itv ~/DockerPackages:/mnt/packages centos:7

获得如下错误:

C:/Program Files/Docker/Docker/Resources/bin/docker.exe: Error response from daemon: Mount denied:  
The source path "C:/Users/cb/DockerPackages;C" doesn"t exist and is not known to Docker.
See "C:/Program Files/Docker/Docker/Resources/bin/docker.exe run --help".

看上去貌似windows下文件路径没有被准确识别,我们试试看绝对路径。

试试看绝对路径

winpty docker run -itv /c/Users/cb/DockerPackages:/mnt/packages centos:7

获得如下错误:

C:/Program Files/Docker/Docker/Resources/bin/docker.exe: Error response from daemon: Mount denied:  
The source path "C:/Users/cb/DockerPackages;C"
doesn"t exist and is not known to Docker.
See "C:/Program Files/Docker/Docker/Resources/bin/docker.exe run --help".

错误看上去差不多,文件路径识别的问题。windows下linux工具的使用,路径一直就是个问题。

错误分析

既然是在git bash下使用linux命令,而正常的~/或者/C/folderPath/不能正确运行。眼尖的朋友们可能已经看出端倪了:source path是C:/Users/cb/DockerPackages;C。这个;C在末尾是什么?我们的输入不是这样的不是么?

google一下,stackoverflow也有人提出了类似问题:

Docker mounted volume adds ;C to end of windows path when translating from linux style path

有兴趣可以自己看一下。大意就是,MinGW会把MSYS program的参数自动转换成Window programm,注意其中的一条:

x:/x     x;x;C:MinGWmsys1.0x

这条看上去有些可疑,因为我们也用了类似的写法 :/mnt

解决错误

既然是git-bash尝试补全造成的问题,那就想办法不要补齐或者强制转义。stackoverflow的高分解答表示,在path前加/可以实现跳过path的书写转义规定。那我们来试试看。
错误重现中的第二点,也是用/开始的,显然不对。那我们在前面再加一个/

winpty docker run -itv //c/Users/cb/DockerPackages:/mnt/packages centos:7

问题解决。这个方案我个人感觉是最好的。

试试别的解决方案

综合了Posix path conversion以及stackoverflow的答案,尝试以下的方案也是可以的:

winpty docker run -itv "/C:/Users/cb/DockerPackages":/mnt/packages centos:7
winpty docker run -i -t -v "/C:userscbDockerPackages":/mnt/packages centos:7
winpty docker run -i -t -v "C:userscbDockerPackages":/mnt/packages centos:7

由此看来,开头是不是用/不是很重要。而""是必须的。暂时没有找到可以使用~的方案,如果有,请留言告诉我。
其次,在windows下使用路径,在写:/的时候要非常慎重,这个会被补全或者转义,务必在最前面加上/。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27624.html

相关文章

  • docker的世界

    摘要:反过来别的上的镜像,也不能在树莓派上运行。如果需要找树莓派专用的镜像,那就在上搜索或相关就能找到了。有一个叫的仓库制作了非常多树莓派专用,可以参考下。树莓派安装,最难的在于正确的选择源和添加,才能找到版本适合的并下载。 最近学习Machine Learning发现好多人都用docker,之前一直听说但是感觉和自己无关。但是现在发现原来docker是个这么方便的东西,可以跨平台(不分什么...

    remcarpediem 评论0 收藏0
  • Docker volume 挂载文件件夹不存在

    摘要:文件挂载由于只会覆盖单个文件而不会影响中同一文件夹下的其他文件,常常被用来挂载配置文件,以在运行时,动态的修改默认配置。 背景介绍 docker volume 可以使我们在启动docker容器时,动态的挂载一些文件(如配置文件), 以覆盖镜像中原有的文件,但是,挂载一个主机上尚不存在的文件夹或者文件到容器中会怎样呢?LZ在工作中就遇到了这样的问题,故自己实践了一下,记录实验结果如下: ...

    tuomao 评论0 收藏0
  • 后端的轮子(四)--- 容器

    摘要:先说结论,容器真的很好,很轻量级,功能又很重量级。是的版本完成以后,这个的文件系统就是一个标准的的文件系统了,里面的基本工具一应俱全。 容器,目前最火的话题了,在后端的开发中,容器的运用也已经是主流技术了,今天,我们就来说说容器技术,之前我对这一块的了解不是很多,但是最近有些特殊原因转成运维工程师了,而公司的全线服务都是docker的,以一个开发人员的习惯,转成运维以后,还是想对这种东...

    weizx 评论0 收藏0

发表评论

0条评论

awesome23

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<