【问题标题】:Docker Toolbox (Windows): invalid volume specificationDocker Toolbox (Windows):无效的卷规范
【发布时间】:2018-12-24 10:43:28
【问题描述】:

配置

使用 Windows 10、Docker Toolbox(不是原生 Docker,能够使用虚拟机)。

背景

有一个 Python (2.7) 脚本应该运行 Docker 容器。代码如下所示:

self.docker.containers.run('container_name',
                           command='bash -c "%s"' % command,
                           volumes={PROJECT_PATH: {'bind': '/shared', 'mode': 'rw'}},
                           working_dir='/shared',
                           remove=True,
                           **kwargs)

问题

尝试运行脚本:

* Building the DummyProbe docker image
* Running the DummyProbe container   
500 Server Error: Internal Server Error ("invalid volume specification: 'C:\Users\Foo\..:/shared:rw'")

想法

在网上搜索invalid volume specification似乎是由Windows和Linux处理目录结构的方式引起的。 Linux 使用斜杠 / 而 Windows - 反斜杠 \。类似的问题:

但在我的情况下,COMPOSE_CONVERT_WINDOWS_PATHS 已设置(设置为 true,也尝试设置为 1):

PowerShell

Docker 工具箱

$ docker-machine env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://111.111.11.111:1111"
export DOCKER_CERT_PATH="C:\Users\Foo\.docker\machine\machines\default"
export DOCKER_MACHINE_NAME="default"
export COMPOSE_CONVERT_WINDOWS_PATHS="true"
# Run this command to configure your shell:
# eval $("C:\Program Files\Docker Toolbox\docker-machine.exe" env)

其他问题中的建议均无效。

更新

尝试用/替换\并在脚本中使用:

500 Server Error: Internal Server Error ("invalid volume specification: 'C:/Users/***/..:/shared:rw'")

看来这不是问题

【问题讨论】:

    标签: docker docker-toolbox


    【解决方案1】:

    我能够通过将所有 \\ 替换为 / 并将 C: 替换为 /c 来完成这项工作。

    损坏的路径: C:\\Path\\to\\file 变成 /c/path/to/file

    https://docs.python.org/2/library/os.html

    似乎负责返回系统路径的os 模块没有将Windows 转换为Unix 路径的内置函数。并且 Docker 工具箱也不处理这种转换(如果它应该处理的话)。

    可能还有其他一些优雅的方式来完成这项工作。但现在只使用这个。

    【讨论】:

    • 可能是因为COMPOSE_CONVERT_WINDOWS_PATHS 期待一个整数,例如10?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2016-03-13
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多