在dockerfile中,我想为globbing定义的文件指定一个复制操作,我希望它也可以用路径复制。所以,像这样:
COPY ./src/**/project.json /app/**/
考虑到我有以下结构:
./src/bar/project.json
./src/foo/project.json
目的地应如下所示:
/app/bar/project.json
/app/foo/project.json
但显然,这不起作用,如果我有机会,我真的不想单独指定所有COPY操作。知道怎么做吗?
请注意,我基本上无法通过
.dockerignore
as 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 :(得分:7)
对于任何非标准的构建操作,我更喜欢在脚本中包含docker build
命令(名为' build
')。
我会在这里
tmp
(位于Dockerfile
旁边,以便将其保留在docker build
上下文中)cp
cp ./src/**/project.json tmp
docker build
Dockerfile
COPY tmp/ /app/
tmp
。这样,在从主机上下文构建映像之前,我预先配置了主机所需的内容。
答案 1 :(得分:3)
解决方法
Dockerfile
:
COPY src/ /app/
.dockerignore
:
**
!**/project.json
答案 2 :(得分:1)
有点晚了,但是通过多阶段构建,您可以得到这种行为。在这里,我这样做是为了进行大型Maven构建
FROM maven:3.6-slim as staging
WORKDIR /src/
COPY . .
RUN mkdir /poms/ \
&& find ./ -type d -exec mkdir -p '/poms/{}' \; \
&& find ./ -name pom.xml -exec cp -r '{}' '/poms/{}' \;
FROM maven:3.6-slim as builder
WORKDIR /src/
COPY --from=staging /poms/* ./
RUN mvn dependency:go-offline
有点骇人听闻,但考虑到它是一个多阶段操作,第一阶段就被扔掉了,而复制是一项廉价的操作