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

Mar*_*ler 6 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
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

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'.
Run Code Online (Sandbox Code Playgroud)

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

最佳马库斯

Meh*_*pek 15

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

Docker 论坛:将 Windows 目录映射到 Docker 容器

正如他们所说,

在 Windows 上,您不能直接将 Windows 目录映射到您的容器。因为您的容器驻留在 VirtualBox 虚拟机中。所以你的 docker -v 命令实际上映射了 VM 和容器之间的目录。

所以你必须分两步完成:

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

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


BMi*_*tch 15

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

docker run -ti -h python -v ${pwd}:/root/docker -p 9999:9999 ubuntu:latest /bin/bash
Run Code Online (Sandbox Code Playgroud)

${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
Run Code Online (Sandbox Code Playgroud)

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

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

请注意,在两个示例中,我都引用了路径,以防包含空格。


小智 12

我建议您在 Windows 中使用绝对路径,例如:

docker run -ti -h python -v /c/path_to_application:/root/docker -p 9999:9999 ubuntu:latest /bin/bash
Run Code Online (Sandbox Code Playgroud)

添加/c/then_remaining_part_to_your_app,注意/c/是驱动。

  • 是的,应该是这样,但即使我看到 /root/docker 文件夹,它也是空的。 (2认同)

小智 9

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

docker run -ti -h python -v /${pwd}://root/docker -p 9999:9999 ubuntu:latest /bin/bash
Run Code Online (Sandbox Code Playgroud)

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

docker run -ti -h python -v //c/path_to_application://root/docker -p 9999:9999 ubuntu:latest /bin/bash
Run Code Online (Sandbox Code Playgroud)