我是一个Docker新手,目前正在复制课程视频。我必须补充的是,我只有Windows 10 Home,因此我仅限于Docker工具箱。(在工作中,我有W 10 Pro,使用Docker本身,没有遇到我即将报告的问题)。
当我在Windows Power Shell中运行以下命令时:
PS C:\Program Files\Docker Toolbox> docker run -ti -h python -v ${pwd}:/root/docker -p 9999:9999 ubuntu:latest /bin/bash
我收到以下错误
C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: invalid mode: /root/docker.
See 'C:\Program Files\Docker Toolbox\docker.exe run --help'.
问题不是发生在命令提示符下,所以看起来和电源 shell 有关。我在讨论板上没有找到任何东西。任何输入都将不胜感激。
最佳马库斯
7条答案
按热度按时间piah890a1#
我在使用Docker工具箱时遇到了同样的问题。在源路径和目标路径之前再使用一个“/”可以解决这个问题。在您的情况下,它看起来像这样:
如果这样做不起作用,请尝试使用绝对路径和额外“/”,如下所示:
r55awzrz2#
“无效模式”错误来自解析卷装载中的第三个字段,其中每个字段都用冒号分隔。在此命令中:
${pwd}
将扩展为类似c:\Program Files\...
的内容,这意味着卷挂载将被解析为:C
(或您当前的驱动器号,这将作为命名卷而不是主机路径进行处理)/Program Files/...
或您碰巧从中运行此命令的任何位置。/root/
,这是一种“无效模式”(正常选项包括ro
等用于只读装载的选项)您需要在驱动器号之前添加一个前导斜杠,并删除驱动器号之后多余的冒号。使用PowerShell时,您可能被迫手动展开路径,而不使用
${pwd}
。如果你使用git bash,它有一个独特的功能,可以将带有正斜杠的内容转换成安装目录下的相对路径。要禁用这个功能,你可以切换到第二个斜杠:
注意,在这两个例子中,我都引用了路径,以防包含空格。
jchrr9hc3#
结果表明Docker Toolbox需要一种不同的方法,如本文所述
Docker Forums: Map Windows Directory to Docker Container
正如他们所说,
在Windows上,你不能直接将Windows目录Map到你的容器。因为你的容器驻留在VirtualBox VM中。所以你的docker -v命令实际上是在VM和容器之间Map目录。
所以你得分两步来做:
通过VirtualBox管理器将Windows目录Map到虚拟机将容器中的目录Map到虚拟机中的目录您最好使用Kitematic UI来帮助您,这样会更容易。
h9vpoimq4#
我建议你在Windows中使用绝对路径,类似于:
添加
/c/then_remaining_part_to_your_app
,注意/c/
是驱动器。pxyaymoc5#
我也有同样的问题与Docker和我的解决方案是部分解决了上面的答案之一,说使用一个
/
之前的PWD命令。然而,带花括号的
/${pwd}
在Git Bash中给我一个错误的输出,所以这个问题的答案是使用/$(pwd)
。Docker的最终答案是:
xeufq47z6#
其他的答案非常有用。只是想补充一些我在研究这个问题时学到的东西。这是关于gitbash for windows在幕后所做的POSIX-Windows文件路径转换。它与冒号变成分号以匹配PATH分隔符有关。它更好地解释了here。似乎当你进行转义时,你需要匹配其他答案中所述的卷挂载。无论如何,希望这也能帮助其他人。
ubbxdtey7#
您看到的错误消息表明您用于Docker卷装载的路径不是绝对路径。
要解决此问题,您可以将${pwd}替换为本地目录的绝对路径。以下是在Windows上查找绝对路径的方法:
1.使用
cd
命令导航到要用于Docker卷装载的目录。1.键入echo
%cd%
并按Enter键,这将打印当前目录的绝对路径。1.现在,您可以将Docker run命令中的
${pwd}
替换为刚才找到的绝对路径,并用引号括起来。docker run -it -h python -v "%cd%":/root/docker -p 9999:9999 ubuntu:latest /bin/bash