docker COPY with file globbing

tug*_*erk 12 linux docker dockerfile

在dockerfile中,我想为globbing定义的文件指定一个复制操作,我希望它也可以用路径复制.所以,像这样:

COPY ./src/**/project.json /app/**/
Run Code Online (Sandbox Code Playgroud)

考虑到我有以下结构:

./src/bar/project.json
./src/foo/project.json
Run Code Online (Sandbox Code Playgroud)

目的地应如下所示:

/app/bar/project.json
/app/foo/project.json
Run Code Online (Sandbox Code Playgroud)

但显然,这不起作用,如果我有机会,我真的不想单独指定所有COPY操作.知道怎么做吗?

请注意,我基本上不能忽略其他文件.dockerignore ,因为我将在破坏软件包安装操作后从同一文件夹中复制其他文件.所以,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"]
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 7

对于任何非标准的构建操作,我更喜欢docker build在脚本(名为' build')中包装命令.
我愿意

  • 创建一个子文件夹tmp(就在旁边Dockerfile,以便将其保留在docker build上下文中)
  • cp用globing 做壳:cp ./src/**/project.json tmp
  • 打电话docker build,Dockerfile包括COPY tmp/ /app/
  • 删除tmp.

这样,在从主机上下文构建映像之前,我预先配置了主机所需的内容.


Ale*_*ler 5

解决方法

Dockerfile

COPY src/ /app/
Run Code Online (Sandbox Code Playgroud)

.dockerignore

**
!**/project.json
Run Code Online (Sandbox Code Playgroud)

  • 缺点是我将在另一次操作(`dnu restore`)后复制所有其他内容。所以,`.dockerignore` 将是一个问题。 (5认同)