Dockerfile ADD или COPY несколько файлов в разных подкаталогах за один шаг, сохраняя структуру каталогов - PullRequest
0 голосов
/ 24 января 2019

Предположим, у меня есть дерево проекта Elixir, организованное так:

$ tree .
.
├── apps
│   ├── a
│   │   ├── ...
│   │   └── mix.exs
│   ├── b
│   │   ├── ...
│   │   └── mix.exs
│   └── c
│       ├── ...
│       └── mix.exs
├── mix.exs
└── mix.lock

(несвязанные файлы удалены)

Файл Docker, который я написал для этого проекта, выглядит примерно так:

FROM bitwalker/alpine-elixir-phoenix:latest

ENV MIX_ENV=prod

# Elixir deps
# FIXME: do not hardcode apps/ subdirectories, use wildcards somehow
# FIXME: copy everything in one step somehow
ADD apps/a/mix.exs apps/a/
ADD apps/b/mix.exs apps/b/
ADD apps/c/mix.exs apps/c/
ADD mix.exs mix.lock ./
RUN mix local.hex --force && mix deps.get && mix deps.compile

<skipped>

ADD . .
RUN mix compile && mix phx.digest

CMD [ "mix", "phx.server" ]

Есть ли способ ДОБАВИТЬ или КОПИРОВАТЬ все apps/*/mix.exs за один шаг, сохранив их структуру каталогов (чтобы каждый apps/foo/mix.exs заканчивался $WORKDIR/apps/foo/mix.exs)?

ВНасколько я знаю, нет никакого очевидного способа сделать то, что я хочу.Напримерговоря что-то вроде ADD apps/*/mix.exs mix.exs mix.lock ./ просто копирует все в WORKDIR (и файлы перезаписывают друг друга).

Может быть, есть какой-то неочевидный способ?

1 Ответ

0 голосов
/ 24 января 2019

Обходной путь, о котором я мог бы подумать, это добавить следующее в .dockerignore файл

apps/**
!apps/*/mix.exs

и в файле Docker,

COPY apps/ /apps
COPY mix.exs mix.lock /

или даже

COPY . /

Примечание

Если вам не нужно придерживаться чистого решения dockerfile, поместите docker build в сценарий оболочки или make-файл и используйте cp, что также является хорошим способом сделать это.

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