2016-02-27 4 views
4

Внутри файла docker, я хочу указать операцию копирования для файлов, которые определены с помощью globbing, и я хочу, чтобы он также был скопирован с этим путем. Так, что-то вроде этого:docker COPY с файловым 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

Почему вы не делаете thre копия? Сначала скопируйте все в временную папку с COPY. Затем вы выполняете команду «RUN yourcopycommand only-my-proj-files-from-temp», затем «RUN dnu restore», а затем еще один «RUN yourcopycommand the-still-files-from-temp». Последняя - очистка временных файлов. – blacklabelops

ответ

2

Для любой нестандартной операции сборки, я предпочитаю оберточной команду docker build в скрипте (названный «build»).
Здесь я

  • создать вложенную папку tmp (только рядом с Dockerfile, для того, чтобы держать его в docker build контексте)
  • сделать оболочку cp с globing: cp ./src/**/project.json tmp
  • вызова docker build, с Dockerfile включая COPY tmp/ /app/
  • удаление tmp.

Таким образом, я предварительно настрою то, что мне нужно от хоста, перед созданием образа из контекста хоста.

1

Обход

Dockerfile:

COPY src/ /app/ 

.dockerignore:

** 
!**/project.json 
+1

Недостатком является то, что я буду копировать все остальное после другой операции ('dnu restore'). Таким образом, проблема '.dockerignore' будет проблемой. – tugberk

+0

Тогда это не сработает. –

+0

Прохладный обходной путь для того, что я спросил. Я должен был сделать вопрос более ясным, обновил его сейчас. – tugberk

Смежные вопросы