Dockerfile: добавленная переменная не сохраняется между инструкциями RUN - PullRequest
0 голосов
/ 02 марта 2019

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

Dockerfile:

FROM bitnami/minideb:stretch

SHELL ["/bin/bash", "-c"]

ARG VAR1="1"
ARG VAR2="Hello"

# Export arguments
RUN export VAR1="${VAR1}" \
    && export VAR2="${VAR2}"

# Output "Hello world"
RUN if [ $VAR1 = "1" ]; then VAR2+=" world"; fi \
    && echo $VAR2

# Output "Hello" instead of "Hello World"
RUN echo $VAR2

Наверняка каждый RUN происходит в новой оболочке.

Нопочему, черт возьми, VAR2+=" world" не сохраняется, поскольку export VAR2="${VAR2} сохраняется?

Я действительно не понимаю.

Заранее спасибо всем, кто найдет способ справиться с этим странным поведением..

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Вы можете попробовать добавить «экспорт»:

RUN if [ $VAR1 = "1" ]; then export VAR2+=" world"; fi \
    && echo $VAR2
0 голосов
/ 02 марта 2019

В соответствии с документацией вы можете передать либо переменную окружения, используя либо -e, --env, --env-file, либо bash's export, как вы делали выше.

Вы не можете установить переменную, используя скрипт bashпопробуйте export другую переменную (скажем, VAR3) в вашем предложении if.

Вы можете пойти с чем-то вроде этого ответа , но это действительно ужасно:

FROM bitnami/minideb:stretch

SHELL ["/bin/bash", "-c"]

ARG VAR1="1"
ARG VAR2="Hello"

# Export arguments
RUN export VAR1="${VAR1}" \
    && export VAR2="${VAR2}"

RUN echo 'if [ $VAR1 = "1" ]; then VAR2+=" world"; fi' > ~/.bashrc

# Output "Hello" instead of "Hello World"
RUN source ~/.bashrc && echo "$VAR2"

Вы можете сделать свой сценарий (my_env выше) вне файла Docker и получить его изнутри или использовать -e, --env, --env-file, последний намного лучше.

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