Dentro del dockerfile, quiero especificar una operación de copia para los archivos que están definidos por globbing y también quiero que se copie con la ruta. Entonces, algo como esto:
COPY ./src/**/project.json /app/**/Teniendo en cuenta que tengo la siguiente estructura:
./src/bar/project.json ./src/foo/project.jsonEl destino debería verse así:
/app/bar/project.json /app/foo/project.jsonpero aparentemente, esto no funciona y realmente no quiero especificar todas las operaciones COPY por separado si tengo la oportunidad. ¿Alguna idea de cómo se hace esto?
Tenga en cuenta que básicamente no puedo ignorar otros archivos a través de
.dockerignorecomo se sugiere , ya que voy a copiar los otros archivos de la misma carpeta después de arruinar la operación de instalación de un paquete. Entonces, el dockerfile es similar a esto: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"]
Para cualquier operación de compilación no estándar, prefiero envolver el comando de docker build en un script (llamado ' build ').
Aquí lo haría
tmp (justo al lado del Dockerfile , para mantenerlo en el contexto de docker build )cp con globing: cp ./src/**/project.json tmpdocker build , con un Dockerfile incluya COPY tmp/ /app/tmp .De esa manera, preconfiguro lo que necesito del host, antes de construir la imagen desde el contexto del host.
Solución alterna
Dockerfile :
COPY src/ /app/ .dockerignore :
** !**/project.jsonUn poco tarde, pero con la construcción de varias etapas, puede obtener este comportamiento. Aquí lo hago para una gran construcción experta
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-offlineUn poco de truco, pero dado que es una etapa múltiple, la primera etapa simplemente se tira y la copia es una operación barata.