2016-02-27 52 views
4

在dockerfile中,我想为由globbing定义的文件指定一个复制操作,我希望它也可以用路径复制。所以,这样的事情:docker COPY with file globbing

COPY ./src/**/project.json /app/**/ 

考虑到我有以下结构:

./src/bar/project.json 
./src/foo/project.json 

目标应该是这样的:

/app/bar/project.json 
/app/foo/project.json 

,但显然,这并不工作,如果我有机会,我真的不想单独指定所有的COPY操作。任何想法如何做到这一点?

请注意,我不能基本上都是通过.dockerignoreas suggested忽略其他文件,我会毁了一个软件包安装操作之后到其他文件相同的文件夹中复制。所以,dockerfile与此类似:

FROM microsoft/aspnet:1.0.0-rc1-update1 

COPY ./src/**/project.json /app/**/ 
WORKDIR /app/ModernShopping.Auth 
RUN ["dnu", "restore"] 
ADD ./src /app 

EXPOSE 44300 
ENTRYPOINT ["dnx", "web"] 
+0

好像这是现在还没有:https://github.com/docker/docker/issues/15858 – tugberk

+0

希望他们很快加入:https://github.com/docker/docker/issues/15771#issuecomment-225786238 –

+0

为什么你不这样做: e方式复制?首先将所有内容复制到COPY的某个临时文件夹中。然后你只'运行yourcopy命令 - 我的proj-files-from-temp',接下来是'RUN dnu restore',然后再运行另一个'RUN yourcopy命令和-reven-files-from-temp'。最后是临时文件夹清理。 – blacklabelops

回答

2

对于任何非标订做操作,我更喜欢在脚本包裹docker build命令(名为“​​build”)。
这里我要

  • 创建子文件夹tmp(只是Dockerfile旁边,以保持它在docker build上下文)
  • 使外壳cp与globing:cp ./src/**/project.json tmp
  • 呼叫docker build,用包括COPY tmp/ /app/
  • 删除tmp

这样,我在从主机上下文构建图像之前,预先配置我需要的东西。

1

解决方法

Dockerfile

COPY src/ /app/ 

.dockerignore

** 
!**/project.json 
+1

不足之处在于我会在另一个操作('dnu restore')之后复制其他所有内容。所以,'.dockerignore'将会是一个问题。 – tugberk

+0

然后它不会工作。 –

+0

酷我的问题解决方法。我应该让问题更清楚,现在更新。 – tugberk