我是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有关。 我没有在讨论区找到任何东西。任何意见都将不胜感激。
最佳马库斯
答案 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来帮助您。非常容易。
答案 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可以更好地说明。看起来,当您进行转义时,您需要按照其他答案所述匹配卷装入。无论如何,希望这对其他人也有帮助。