Docker Toolbox:来自守护程序的错误响应:无效模式:/ root / docker

时间:2018-05-26 08:09:22

标签: docker docker-toolbox

我是Docker新手,目前正在复制课程视频。我必须补充一点,我只有Windows 10 Home,因此我只限于Docker Toolbox。 (在工作中我有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'.

问题不会在命令提示符中发生,因此它似乎与Power Shell有关。 我没有在讨论区找到任何东西。任何意见都将不胜感激。

最佳

马库斯

6 个答案:

答案 0 :(得分:8)

“无效模式”错误来自解析卷装入中的第三个字段,其中每个字段都用冒号分隔。在此命令中:

docker run -ti -h python -v ${pwd}:/root/docker -p 9999:9999 ubuntu:latest /bin/bash

${pwd}将会扩展为c:\Program Files\...之类的东西。这意味着卷装载将解析为:

  • 源:C(或您当前的驱动器号,它将作为命名卷而不是主机路径进行处理)
  • 目标:/Program Files/...或您恰巧在哪里运行此命令的地方。
  • 安装选项:/root/,这是一种“无效模式”(正常选项包括ro之类的只读安装)

需要在驱动器号前加一个斜杠,并且您要删除驱动器号后的多余冒号。使用PowerShell,您可能不得不不使用${pwd}来手动扩展路径。看起来像这样:

docker run -ti -h python -v "/c/Program Files/...:/root/docker" -p 9999:9999 ubuntu:latest /bin/bash

如果使用git bash,它具有其独特的功能,可以将带有正斜杠的内容转换为其安装目录下的相对路径。要禁用该功能,请切换到第二个斜杠:

docker run -ti -h python -v "/$(pwd):/root/docker" -p 9999:9999 ubuntu:latest //bin/bash

请注意,在两个示例中,我都引用了包含空格的情况下的路径。

答案 1 :(得分:3)

在使用docker工具箱时遇到了同样的问题。在源路径以及目标路径之前再使用一个“ /”将解决此问题。在您的情况下,它将如下所示:

docker run -ti -h python -v /${pwd}://root/docker -p 9999:9999 ubuntu:latest /bin/bash

如果这不起作用,则尝试使用带有额外的'/'的绝对路径,如下所示:

docker run -ti -h python -v //c/path_to_application://root/docker -p 9999:9999 ubuntu:latest /bin/bash

答案 2 :(得分:2)

事实证明,Docker Toolbox需要本讨论中所述的不同方法

Docker Forums: Map Windows Directory to Docker Container

如他们所说,

  

在Windows上,您不能直接将Windows目录映射到您的容器。因为您的容器位于VirtualBox VM中。因此,您的docker -v命令实际上在VM和容器之间映射了目录。

     

所以您必须分两个步骤进行操作:

     

通过VirtualBox管理器将Windows目录映射到VM   将容器中的目录映射到VM中的目录   您最好使用Kitematic UI来帮助您。非常容易。

  • 我首先在VirtualBox上为我使用的计算机定义了一个共享文件夹。
  • 然后关闭该机器和Docker窗口,然后再次启动docker工具箱。
  • 然后默认运行docker-machine ssh,仅将目录更改为您共享的文件夹(具有给定名称)。我的是“ cd mydocker”,然后通过ls可以看到与VM共享的文件。
  • 在工具箱中,运行docker run -it -v / mydocker:/ path_in_container image_name / bin / sh
  • 您应该在/ path_in_container中看到该文件夹​​和内容。

答案 3 :(得分:2)

我也遇到了与 Docker 相同的问题,我的解决方案部分通过上述答案之一解决,该答案说在 PWD 命令之前使用一个 /

然而,带有花括号的 /${pwd}Git Bash 中给了我一个糟糕的输出,所以这个问题的答案是使用 /$(pwd)

Docker 的最终答案是:

docker run --rm -v "/$(pwd)/function":/var/task:ro,delegated -v "/$(pwd)/layer":/opt:ro,delegated lambci/lambda:python3.8 Main.lambda_handler '{"someVar": "someValue", "var2": "value2"}'

答案 4 :(得分:1)

在Windows中使用绝对路径,例如:

docker run -ti -h python -v /c/path_to_application:/root/docker -p 9999:9999 ubuntu:latest /bin/bash

添加/ c / then_remaining_part_to_your_app,请注意/ c /是驱动器。应该可以。

答案 5 :(得分:0)

其他答案超级有用。只想添加我在研究时学到的东西。这是关于gitbash for Windows在后台进行的POSIX-Windows文件路径转换的。它与冒号成为分号以匹配PATH分隔符有关。 here可以更好地说明。看起来,当您进行转义时,您需要按照其他答案所述匹配卷装入。无论如何,希望这对其他人也有帮助。