Значение осиротевшего знака доллара в Докере

#docker #keystore

Вопрос:

Привет, я пытаюсь проанализировать a Dockerfile , но у меня возникают проблемы с его анализом. В принципе, есть строка, в которой создается хранилище ключей Java. Однако вместо имени хранилища $ ключей используется символ там, где должно быть имя файла хранилища ключей.

Соответствующая команда выглядит следующим образом:

 RUN keytool -noprompt -import -alias my-ca -file my-ca.pem 
    -storepass $TRUSTSTORE_PASSWORD -storetype JKS -keystore $
 

Когда я запускаю эту команду локально, создается файл хранилища ключей с именем $ файла. Под этим я подразумеваю, что сгенерированное имя файла хранилища ключей является буквальным знаком доллара. Однако это не имеет большого смысла, и мне интересно, происходит ли что-то еще внутри контейнера Docker и что знак доллара является своего рода заполнителем для какого-то другого имени.

Полное содержание этого Dockerfile документа выглядит следующим образом:

 FROM openjdk:11.0.6-jdk-slim

LABEL maintainer="My Team"
LABEL version="2.1"

# build args
ARG KAFKA_VERSION="2.4.0"
ARG SCALA_VERSION="2.12"

# env vars
ENV KAFKA_BROKERS="myserver.mycompany.net:9093"
ENV KAFKA_CONSUMER_GROUP=""
ENV KAFKA_OPTS="-Xmx512m"
ENV KAFKA_TIMEOUT_MS="20000"
ENV KAFKA_SHIFT_BY="1"
ENV KAFKA_SOURCE_TOPIC=""
ENV KAFKA_SOURCE_TOPIC_PARTITION=""
ENV KAFKA_SINK_TOPIC=""
ENV KAFKA_USERNAME=""
ENV KAFKA_PASSWORD=""
ENV KAFKA_TRUSTSTORE_LOCATION="/usr/local/kafka/truststore.jks"
ENV TRUSTSTORE_PASSWORD="password"

ADD https://downloads.apache.org/kafka/$KAFKA_VERSION/kafka_$SCALA_VERSION-$KAFKA_VERSION.tgz .
RUN tar -xzf kafka_$SCALA_VERSION-$KAFKA_VERSION.tgz amp;amp; 
    mv kafka_$SCALA_VERSION-$KAFKA_VERSION /usr/local/kafka

ADD https://myserver.mycompany.com/docs/ca-certificates/my-ca.pem .
RUN keytool -noprompt -import -alias my-ca -file my-ca.pem 
    -storepass $TRUSTSTORE_PASSWORD -storetype JKS -keystore $


COPY KafkaCopyMessage.java /usr/local/kafka/
COPY print_input_arguments.sh 
     prepare_kafka_consumer_props.sh 
     check_consumer_group_state.sh 
     shift_offset_and_copy_messages.sh 
     /usr/local/scripts/

WORKDIR /usr/local/scripts/
SHELL ["/bin/bash", "-c"]

ENTRYPOINT chmod  x /usr/local/scripts/*.sh amp;amp; 
  ./print_input_arguments.sh amp;amp; 
  ./prepare_kafka_consumer_props.sh amp;amp; 
  ./check_consumer_group_state.sh amp;amp; 
  ./shift_offset_and_copy_messages.sh

 

Таким образом, в контексте вышеупомянутой RUN команды Docker, что означает этот знак доллара? Я пытался чрезмерно гуглить, но безрезультатно.

Комментарии:

1. Есть ли что-нибудь еще в файле dockerfile? Как вы подозреваете, доллар может быть частью некоторой переменной, например $TRUSTSTORE_PASSWORD, используемой в той же команде

2. Спасибо. Глядя на присвоенное значение, я подозреваю, что автор, возможно, намеревался использовать $KAFKA_TRUSTSTORE_LOCATION в качестве значения для хранилища ключей.

3. Хм, я ожидаю, что вам нужно будет избежать знака доллара в файле dockerfile, чтобы он работал.

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

5. Но я подозреваю, что вы правы относительно намерений первоначального автора.