Условная проверка в Dockerfile - PullRequest
0 голосов
/ 04 мая 2020

У меня есть Dockefile, в который я хочу скопировать определенные файлы на основе входной переменной среды. До сих пор я пробовал следующее. Я могу проверить, что моя переменная среды передана правильно. Во время моей docker сборки я получаю следующую ошибку - >> / bin / sh: COPY: не найдено

ARG arg=a
RUN if [ "$arg" = "a" ] ; then \
 echo arg is $arg; \
 COPY test.txt /
else \
 echo arg is $arg; \
fi

1 Ответ

1 голос
/ 04 мая 2020

То, что вы, по сути, пытаетесь сделать здесь, - это иметь команду COPY внутри команды RUN.

В файлах Docker нет вложенных команд.

Более того, * Команда 1007 * запускает внутри промежуточного контейнера, созданного из образа. А именно, ARG arg=a создаст промежуточный образ, затем docker раскрутит контейнер и использует его для запуска команды RUN и зафиксирует этот контейнер в качестве следующего промежуточного образа в процессе сборки.

так что COPY не может выполняться внутри контейнера, и фактически RUN в основном запускает команду оболочки внутри контейнера, а COPY не является командой оболочки.

AFAICT dockerfiles don У меня нет никаких средств для выполнения условного исполнения. Лучшее, что вы можете сделать:

COPY test.txt
RUN if [ "$arg" = "a" ] ; then \
 echo arg is $arg; \
else \
 echo arg is $arg; \
 rm -r test.txt \
fi

Но имейте в виду, что если test.txt - это файл размером 20 ГБ, размер вашего изображения будет по-прежнему> 20 ГБ.

...