Dockerfile:复制/添加路径中的空格字符(Windows)

nle07wnf  于 2022-12-11  发布在  Docker
关注(0)|答案(3)|浏览(225)

在Windows 10(cmd)中,我试图从名称中包含空格字符的子文件夹复制文件。
1.首先我试着用引号:

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

错误消息:
无法处理**"\“文件夹”**:查找匹配的双引号时出现意外的语句结尾
1.“JSON”格式(跳过第一行):

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

错误消息:
无法处理**"[\“文件夹”**:查找匹配的双引号时出现意外的语句结尾
1.尝试使用单个反斜杠进行转义:

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

错误消息:
无法处理**"\“文件夹\"**:查找匹配的双引号时出现意外的语句结尾
1.尝试使用双反斜杠进行转义:

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

错误消息:
无法处理**"“文件夹\\":查找匹配的双引号时出现意外的语句结尾
1.还尝试了使用
%20**代替空格的建议:

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

错误消息:
复制失败:无源文件
1.转义符替换:

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

错误消息:
无法处理**"\“文件夹”'**:查找匹配的双引号时出现意外的语句结尾
1.相同,但不加引号:

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

错误消息:
复制失败:文件夹**:没有这样的文件或目录
1.使用tar归档文件打包/解包的方法(我不喜欢这个想法)。
应该可以吧?

t98cgbkg

t98cgbkg1#

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

停靠文件:

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/"]

请更新您的意见:

在官方指南中,它说:
当复制包含特殊字符(如[和])的文件或目录时,您需要遵循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]/"]
mccptt67

mccptt672#

我同意从Docker获取具有特殊字符的文件是很烦人的,我有过类似的经历,经过几个小时的尝试和错误,我想出了这个简单的解决方案,从那时起我现在就在使用。
tar/zip文件,然后“docker cp”他们很容易,而不必担心几十个[]'"。
容器计算机中的tar文件:

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

#or unzipped
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/中传输

5lhxktic

5lhxktic3#

解决方案如下:

Docker更新了它的COPY命令。所以你可以使用括号,你的文件名可以有空格。在这里阅读更多(官方文档)

相关问题