【问题标题】:Dockerfile: COPY / ADD with space character in path (Windows)Dockerfile:复制/添加路径中的空格字符(Windows)
【发布时间】:2019-10-18 14:19:36
【问题描述】:

在 Windows 10 (cmd) 中,我尝试从名称中包含空格字符的子文件夹中复制文件。

  1. 首先我尝试使用引号:

    FROM jfloff/alpine-python:2.7
    COPY "Folder 1/File.txt" "Dir 1"
    

    错误信息:

    未能处理 "\"Folder":在查找匹配的双引号时语句意外结束

  2. “JSON”格式(跳过第一行):

    COPY ["Folder 1/File.txt" "Dir 1"]
    

    错误信息:

    未能处理 "[\"Folder":在寻找匹配的双引号时语句意外结束

  3. 尝试用一个反斜杠转义:

    COPY "Folder\ 1/File.txt" "Dir\ 1"
    

    错误信息:

    处理 "\"Folder\\" 失败:查找匹配双引号时语句意外结束

  4. 尝试用双反斜杠转义:

    COPY "Folder\\ 1/File.txt" "Dir\\ 1"
    

    错误信息:

    处理 "\"Folder\\\\" 失败:查找匹配双引号时语句意外结束

  5. 还尝试了使用 %20 代替空格的建议:

    COPY ["Folder%201/File.txt" "Dir%201"]
    

    错误信息:

    复制失败:没有源文件

  6. 转义字符替换:

    # escape=`
    COPY "Folder` 1/File.txt" "Dir 1"
    

    错误信息:

    未能处理 "\"Folder`":在查找匹配的双引号时语句意外结束

  7. 相同,但没有引号:

    #escape=`
    COPY Folder` 1/File.txt Dir` 1
    

    错误信息:

    复制失败:stat /var/lib/docker/tmp/docker-builder082039614/文件夹:没有这样的文件或目录

  8. 使用 tar 存档打包/解包的方法(我对这个想法不满意)。

应该可以吧?

【问题讨论】:

  • 这个answer可以帮助你吗?使用绝对路径?
  • @menya 不幸的是,它没有帮助

标签: windows docker path dockerfile


【解决方案1】:

同意从 docker 获取具有特殊字符的文件很烦人, 有类似的经历,经过数小时的尝试和错误,我想出了这个简单的解决方案,从那时起我就一直在使用。

tar/zip 文件,然后轻松地“docker cp”它们,而不必担心几十个 []'"..

容器机器中的 tar 文件:

压缩

tar czf myfiles.tar.gz file1.txt dir24 file_xyz

或 解压

tar -cvf myfiles.tar file1.txt dir24 file_xyz

然后将它们复制到 Windows 机器的本地目录中。

在windows中打开cmd 运行

docker cp ABCD_CONTAINER_NAME:PATH/myfiles.tar.gz d:/TARGETDIR/

检查文件是否已在 d:/TARGETDIR/ 中传输

【讨论】:

    【解决方案2】:

    也许你可以使用ARG 来帮助你,像这样:

    Dockerfile:

    FROM jfloff/alpine-python:2.7
    ARG src="Folder 1/File.txt"
    ARG target="Dir 1/"
    COPY ${src} ${target}
    

    顺便说一句,/ 必须添加到 Dir 1 的末尾,如果你真的想把它当作一个文件夹。

    而且,JSON格式也可以,只是你错过,,应该是:

    FROM jfloff/alpine-python:2.7
    COPY ["Folder 1/File.txt", "Dir 1/"]
    

    您的 cmets 更新:

    official guide,它说:

    在复制包含特殊字符(如 [ 和 ])的文件或目录时,您需要按照 Golang 规则对这些路径进行转义,以防止它们被视为匹配模式。

    所以,对于你的情况,应该是:

    FROM jfloff/alpine-python:2.7
    ARG src="[[]Folder 1]/__SLIM_TEMPLATE.mm"
    ARG target="[Folder 1]/"
    COPY ${src} ${target}
    

    或者:

    FROM jfloff/alpine-python:2.7
    COPY ["[[]Folder 1]/__SLIM_TEMPLATE.mm", "[Folder 1]/"]
    

    【讨论】:

    • 非常感谢!看来我的路径不仅包含空格,还包含方括号和下划线: ARG src="[Folder 1]/__SLIM_TEMPLATE.mm" ARG target="[Folder 1]/" COPY ${src} ${target} ,它失败并显示消息: COPY failed: no source files were specified。我尝试转义括号,但没有成功
    猜你喜欢
    • 2022-12-10
    • 1970-01-01
    • 2017-02-01
    • 2018-09-12
    • 2019-09-04
    • 1970-01-01
    • 2018-06-18
    • 2021-03-29
    • 1970-01-01
    相关资源
    最近更新 更多