Как проверить, установлена ​​ли переменная окружения в контейнере Docker? - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь настроить кластер Kafka для одного брокера на узел с помощью Docker. Идея состоит в том, что несколько Docker-контейнеров будут содержать каждого брокера, и у меня будет другой Docker-контейнер в качестве узла Zookeeper. Я создаю образ, где я могу передать адрес zookeeper и идентификатор брокера в качестве переменных среды, которые будут использоваться для запуска брокера. Это будет полезно для вызова нескольких узлов с разными идентификаторами брокера, просто передавая их как переменные env, когда я запускаю контейнер из образа.

Это мой докер-файл:

FROM openjdk:8

RUN mkdir /kafka
WORKDIR /kafka

COPY kafka_2.12-2.3.0 kafka_2.12-2.3.0

COPY cmd.sh cmd.sh

RUN cat /etc/os-release
RUN chmod +x ./cmd.sh

CMD ["./cmd.sh"]

EXPOSE 9092

А это мой cmd.sh

#!/bin/sh

export KAFKA_DIR=/kafka/kafka_2.12-2.3.0

if [[ -z $KAFKA_BROKER_ID || -z $KAFKA_ZOOKEEPER_ADDRESS ]]; then
  echo 'Zookeeper address and broker id need to be set by env variables KAFKA_ZOOKEEPER_ADDRESS and KAFKA_BROKER_ID'
  exit 1
fi

echo "Broker ID: ${KAFKA_BROKER_ID}"
echo "Zookeeper addresss: ${KAFKA_ZOOKEEPER_ADDRESS}"

"${KAFKA_DIR}"/bin/kafka-server-start.sh "${KAFKA_DIR}"/config/server.properties --override broker.id="${KAFKA_BROKER_ID}" --override zookeeper.connect="${KAFKA_ZOOKEEPER_ADDRESS}"

Я получил это из вопроса Как проверить, определены ли несколько переменных в bash

Я ожидаю увидеть сообщение об ошибке, но вместо этого получаю следующее:

./cmd.sh: 5: ./cmd.sh: [[: not found ./cmd.sh: 5: ./cmd.sh: -z: not
found Broker ID: Zookeeper addresss: [2019-07-03 08:56:04,172] INFO
Registered kafka:type=kafka.Log4jController MBean
(kafka.utils.Log4jControllerRegistration$) [2019-07-03 08:56:04,752]
ERROR Exiting Kafka due to fatal exception (kafka.Kafka$)
org.apache.kafka.common.config.ConfigException: Invalid value  for
configuration broker.id: Not a number of type INT

1 Ответ

0 голосов
/ 03 июля 2019

if ( -z "$KAFKA_ZOOKEEPER_ADDRESS" || -z "$KAFKA_BROKER_ID" ) не будет работать на bash, который имеет недопустимый синтаксис:

, вы должны использовать:

if [ -z "$KAFKA_ZOOKEEPER_ADDRESS" || -z "$KAFKA_BROKER_ID" ]; then

и изменить свой шебанг на #!/bin/bash

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