Проверьте переменные среды в Docker - PullRequest
0 голосов
/ 06 июля 2018

Есть ли какой-нибудь ASSERT в Docker?

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

Код, который вызвал у меня проблемы:

echo ${LICENSE_KEY} > /etc/license.key

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

Из моего прочтения документации по Docker (начиная с Docker 0.7) я могу запустить команду оболочки, которая возвращает ненулевое состояние и это может привести к сбою сборки. например,

RUN [ ! -z "${LICENSE_KEY}" ]

Хотя это приведет к появлению дополнительных слоев и кода в изображении, для других это может быть неочевидным, поскольку оно предназначено только для отладки / защиты и не содержит явной причины сбоя в сочетании с другими командами. Я действительно ожидал, что у докера будет что-то похожее на:

ASSERT ${LICENSE_KEY} != ""

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

У меня была похожая проблема, и я сделал что-то вроде:

RUN [ ! -z "${LICENSE_KEY}" ] || { echo "License key cannot be empty"; exit 1; } && \
    ... other run commands ...
0 голосов
/ 06 июля 2018

Это решение, которое я использовал, но ASSERT, который не создавал никаких слоев, было бы лучше.

ARG LICENSE_KEY
RUN [ ! -z "${LICENSE_KEY}" ] # Assert LICENSE_KEY is defined

Пропускная коробка

Step 2/10 : ARG LICENSE_KEY
 ---> Using cache
 ---> e5fba6cf457c
Step 3/10 : RUN [ ! -z "${LICENSE_KEY}" ] # Assert LICENSE_KEY is defined
 ---> Running in 7e83e02e7372
 Removing intermediate container 7e83e02e7372
 ---> c31d8da7b006

неудачный случай

Step 2/10 : ARG LICENSE_KEY
 ---> Using cache
 ---> e5fba6cf457c
Step 3/10 : RUN [ ! -z "${LICENSE_KEY}" ] # Assert LICENSE_KEY is defined
 ---> Running in 0d10210c8bca
The command '/bin/sh -c [ ! -z "${LICENSE_KEY}" ] # Assert LICENSE_KEY is defined' returned a non-zero code: 1

Это определенно создает дополнительные 0-байтовые слои. Как видно из бега:

docker history --no-trunc <image>

sha256:fe9<...snip...>   About an hour ago   |1 LICENSE_KEY=some-key /bin/sh -c [ ! -z "${LICENSE_KEY}" ] # Assert LICENSE_KEY is defined    0B
sha256:e5f<...snip...>   About an hour ago   /bin/sh -c #(nop)  ARG LICENSE_KEY                                                              0B                                                                                                                                                
sha256:5e8<...snip...>   4 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]                                                            0B
...