У меня есть Dockerfile, и я хочу делать разные вещи на основе аргумента сборки, чтобы определить isDev или нет.
В Dockerfile у меня есть:
ARG isDev
RUN echo "what is in isDev ? $isDev"
RUN if ["${isDev}" = "1"] ;
then ..... do dev stuff .... ;
else .... do production stuff ;
fi
Я строю с помощью --build-arg isDev = 1
Step 14/25 : ARG isDev
---> Running in 0a3de5fea466
Removing intermediate container 0a3de5fea466
---> a6d79a08a97e
Step 15/25 : RUN echo "what is in isDev ? $isDev"
---> Running in 92235e8b0c6a
what is in isDev ? 1
Removing intermediate container 92235e8b0c6a
---> a7b064687480
Step 16/25 : RUN if ["${isDev}" = "1"] ; then ... do dev stuff ... ; else ... do production stuff ... ; fi
---> Running in bbe6a047705a
[91m/bin/sh: 1: [1: not found
Что я делаю неправильно?


Вам не понравится этот ответ, вам не хватает места после [. Вам понадобится еще один пробел перед закрывающей скобкой, и вам нужно избежать перевода строки. По крайней мере, это то, что я вижу на первый взгляд.
ARG isDev
RUN echo "what is in isDev ? $isDev"
RUN if [ "${isDev}" = "1" ] ; \
then ..... do dev stuff .... ; \
else .... do production stuff ; \
fi
@ user4447899 подумал, что тебе это не понравится, сделал свою долю ладоней. Забавный совет на день, [ на самом деле является двоичным файлом в системах Linux, вероятно, в /usr/bin/[. Итак, [1 означает, что Linux не может найти этот двоичный файл.
Часто свежие глаза - это все, что вам нужно. Спасибо за помощь и разблокировку. С Уважением
вау, одна из тех ошибок! Спасибо, не могу поверить, что я пропустил пробелы! Спасибо