Dockerfile - копировать только файлы с расширением, сохраняя структуру папок - PullRequest
1 голос
/ 11 октября 2019

Предположим, у меня очень вложенная структура папок с большим количеством файлов проекта:

src
  projectA
    projectA.csproj
    someFile.txt
  projectB
    projectB.csproj
    someFile.txt
  projectC
    projectC.csproj
    someFile.txt

В этом случае я хочу, чтобы мой DockerFile копировал всю структуру папок, но включал только файлы .csproj:

src
  projectA
    projectA.csproj
  projectB
    projectB.csproj
  projectC
    projectC.csproj

Я могу сделать это для каждого файла строка за строкой, но есть ли более чистый способ?

COPY src/projectA/projectA.csproj src/projectA/projectA.csproj
COPY src/projectB/projectB.csproj src/projectB/projectB.csproj
COPY src/projectC/projectC.csproj src/projectC/projectC.csproj

1 Ответ

2 голосов
/ 11 октября 2019

Я столкнулся с подобной ситуацией, и единственное решение, которое я нашел, было подготовить файл .tgz, содержащий то, что мне нужно, и скопировать его в образ докера, используя директиву ADD.

, напримерэто скрипт run.sh, похожий на тот, который я использовал:

#!/bin/bash

tar cvfz csproj.tgz $( find src -name "*.csproj" )
docker build -t test .
docker run -it --rm test

это тестовый Dockerfile:

FROM alpine
RUN mkdir /src
ADD csproj.tgz /src
CMD ls -alR /src

Это решение не очень приятное, но оно сделало то, что мне нужнов то время.

Директива ADD (источник: https://docs.docker.com/engine/reference/builder/#add) может копировать файлы (как директива COPY) и

Если этолокальный архив tar в распознанном формате сжатия (identity, gzip, bzip2 или xz), затем он распаковывается как каталог. Ресурсы с удаленных URL не распаковываются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...