Как избежать знака $ в файле Docker? - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь написать dockerfile, в котором я добавляю несколько java-опций в скрипт, называемый envvars. Чтобы добиться этого, я хочу добавить несколько строк текста к указанному файлу следующим образом:

RUN echo "JAVA_OPTS=$JAVA_OPTS -Djavax.net.ssl.trustStore=${CERT_DIR}/${HOSTNAME}_truststore.jks" >> ${BIN_DIR}/envvars
RUN echo "JAVA_OPTS=$JAVA_OPTS -Djavax.net.ssl.trustStorePassword=${PWD_TRUSTSTORE}" >> ${BIN_DIR}/envvars
RUN echo "export JAVA_OPTS" >> ${BIN_DIR}/envvars

Проблема здесь в том, что я хочу разное. заполнители $ {varname} (с фигурными скобками), которые должны быть заменены во время выполнения команды сборки docker, в то время как подстрока $ JAVA_OPTS (т.е. без скобок) должна отображаться и, таким образом, дословно добавляться в файл envvars, то есть в концерезультат в файле /usr/local/apache2/bin/envvars должен выглядеть следующим образом:

...
JAVA_OPTS=$JAVA_OPTS -Djavax.net.ssl.trustStore=/usr/local/apache2/cert/myserver_truststore.jks
JAVA_OPTS=$JAVA_OPTS -Djavax.net.ssl.trustStorePassword=my_secret
export JAVA_OPTS

Как можно избежать $ -знака из подстановки переменных в dockerfiles? Я нашел подсказки, чтобы использовать \ $ или $$, но ни один не работал для меня.

В случае, если это имеет значение (что я надеюсь / не ожидаю): я создаю образ с помощью «Docker Desktop» в Windows 10, но я ожидаю, что докер-файл будет независим от этого.

1 Ответ

1 голос
/ 04 ноября 2019

сначала вам нужно добавить этот # escape = `в ваш Dockerfile, так как \ является escape-символом в Dockerfile. тогда вы можете использовать \$ для экранирования знака доллара в секции RUN

Пример:

# escape=`
RUN echo "JAVA_OPTS=\$JAVA_OPTS -Djavax.net.ssl.trustStore=${CERT_DIR}/${HOSTNAME}_truststore.jks" >> ${BIN_DIR}/envvars 

, который будет JAVA_OPTS=$JAVA_OPTS в вашем файле env

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