Dockerfile〜添加Windows文件夹的正确语法

时间:2018-09-21 07:57:27

标签: docker dockerfile windows-container

我正在尝试创建一个Dockerfile,将本地Windows文件系统上某处的文件夹添加到Windows容器中。但是,我在弄清楚正确的语法时遇到了麻烦。

具体来说,我试图将目录[C:\ Foo Source Files \ Zog Foo \ Bar]的内容复制到Windows Docker容器中的[C:\ Bar]。

到目前为止,我已经尝试了以下变体:

ADD ["C:\Foo Source Files\Zog Foo\Bar", "C:/Bar"]
ADD ["C:\Foo Source Files\Zog Foo\Bar\", "C:/Bar/"]

这些在尝试运行构建映像时导致以下错误:

failed to process "[\"C:\\Foo": unexpected end of statement while looking for matching double-quote

相比之下,以下变体...

ADD ["C:/Foo Source Files/Zog Foo/Bar", "C:/Bar"] 
ADD ["C:/Foo Source Files/Zog Foo/Bar/", "C:/Bar/"]
ADD ["C:\\Foo Source Files\\Zog Foo\\Bar\\", "C:/Bar/"]
ADD ["C:\\\\Foo Source Files\\\\Zog Foo\\\\Bar\\\\", "C:/Bar/"]
ADD ["C:\\\\Foo Source Files\\\\Zog Foo\\\\Bar", "C:/Bar/"]
ADD C:/Foo Source Files/Zog Foo/Bar/, C:/Bar/
ADD C:\Foo Source Files\Zog Foo\Bar\, C:/Bar/

...导致以下不同的错误:

ADD failed: CreateFile \\?\C:\ProgramData\Docker\tmp\docker-builder997952273\Foo Source Files\Zog Foo\Bar: The system cannot find the path specified.

此变体...

ADD C:\Foo Source Files\Zog Foo\Bar\, C:/Bar/

...引起了这个略有不同的错误:

ADD failed: CreateFile \\?\C:\ProgramData\Docker\tmp\docker-builder997952273\Foo: The system cannot find the path specified.

此后,我尝试删除重命名源文件夹,以便它们不包含任何空格,并尝试使用以下语句:

ADD C:\FooSourceFiles\ZogFoo\Bar\, C:/Bar/

...但是那只会再次导致以下错误:

ADD failed: CreateFile \\?\C:\ProgramData\Docker\tmp\docker-builder197358441\C:FooSourceFilesZogFooBar,: The system cannot find the file specified.

我还尝试使用额外的斜杠作为转义字符...

ADD C:\\FooSourceFiles\\ZogFoo\\Bar\\, C:/Bar/

...但是这也失败了,因为显然Docker正在docker工作目录的子目录中查找文件,即使我试图指示它在绝对路径中查找

ADD failed: CreateFile \\?\C:\ProgramData\Docker\tmp\docker-builder492157702\FooSourceFiles\ZogFoo\Bar\,: The system cannot find the path specified.

任何帮助,将不胜感激。

编辑: 解释为什么这不是Dockerfile COPY指令失败的重复项?: 该问题与COPY指令失败有关,该问题原来是由于“〜/”不起作用,并且与Linux容器有关。我的问题主要是关于在Windows容器上使用ADD命令的正确语法。我看不到这两个问题之间的关系,有关该主题的已批准答案甚至不适用于我的情况。

1 个答案:

答案 0 :(得分:2)

显然,问题在于Docker 不支持绝对路径作为输入路径。

通过将“ Bar”文件夹放置在与Dockerfile相同的目录中,然后在Dockerfile中使用以下ADD语句,我终于能够使它工作:

ADD Bar C:/Bar/

如果我弄错了,并且可以使用绝对路径作为源路径,请更正我。