Скопируйте последнюю версию скрипта SQL в Dockerfile - PullRequest
0 голосов
/ 10 апреля 2020

Я работаю с несколькими различными наборами данных и Docker. Например, у меня есть несколько файлов в папке с именем / database, например model_1. sql, model_2. sql, model_3. sql et c. Мне бы хотелось, чтобы мой Dockerfile был настроен таким образом, чтобы при копировании файла из папки базы данных он выбирал только самый последний файл (например, модель_3. sql), игнорируя остальные. Это возможно?

edit: поскольку мой вопрос, по-видимому, был недостаточно ясен, вот соответствующая строка -

# Copy our newest version 
COPY database/model_3.sql /

Вместо того, чтобы вручную вводить 3, я хотел бы иметь возможность что-то сделать вместе линии модели _ *. sql, но не копируйте их все, скопируйте самые последние. Поэтому, если я в конечном итоге добавлю model_4. sql, мне не нужно будет обновлять мой Dockerfile при его запуске, он автоматически добавит model_4 вместо model_3.

1 Ответ

1 голос
/ 10 апреля 2020

Да, вы можете добиться того же, используя опцию --build-args. Пример: Dockerfile

FROM image:tag
ARG LATEST_FILE #Here I'll parse the LATEST_FILE info as a build argument.

COPY ${LATEST_FILE} #And the value for LATEST_FILE is replaced here.

Docker команда построения:

docker build -f myDockerfile --build-arg LATEST_FILE=$(ls -t database/model_*.sql | head -1) -t imagename:tag .

$(ls -t database/model_*.sql | head -1) получит вам последний файл и будет скопирован на шаге COPY.

Обратите внимание, что синтаксический анализ ls опасен только тогда, когда имя файла содержит пробелы или некоторые забавные символы. Если вы гарантируете, что в именах файлов не будет таких забавных символов, тогда разбирать ls можно.

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