【问题标题】:docker-compose wurstmeister/kafka failing to parse KAFKA_OPTSdocker-compose wurstmeister/kafka 无法解析 KAFKA_OPTS
【发布时间】:2018-09-21 06:20:18
【问题描述】:

我有一个用于 wurstmeister/kafka 的基本 docker-compose 文件

我正在尝试将其配置为使用 SASL_PLAIN 和 SSL 但是,无论我尝试使用多少种方式指定我的 jaas 文件,我都会不断收到此错误

这是我得到的错误

[2018-04-11 10:34:34,545] FATAL [KafkaServer id=1001] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
java.lang.IllegalArgumentException: Could not find a 'KafkaServer' or 'sasl_ssl.KafkaServer' entry in the JAAS configuration. System property 'java.security.auth.login.config' is not set

这些是我拥有的变量。最后一个是我指定我的 jaas 文件的地方

environment:
  KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
  KAFKA_HOST_NAME: 10.10.10.1
  KAFKA_PORT: 9092
  KAFKA_ADVERTISED_PORT: 9093
  KAFKA_ADVERTISED_HOST_NAME: 10.10.10.1
  KAFKA_LISTENERS: PLAINTEXT://:9092,SASL_SSL://:9093
  KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://10.10.10.1:9092,SASL_SSL://10.10.10.1:9093
  KAFKA_SECURITY_INTER_BROKER_PROTOCOL: SASL_SSL
  KAFKA_SASL_ENABLED_MECHANISMS: PLAIN
  SASL_MECHANISM_INTER_BROKER_PROTOCOL: PLAIN
  KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL: PLAIN
  KAFKA_SSL_TRUSTSTORE_LOCATION: /kafka.server.truststore.jks
  KAFKA_SSL_TRUSTSTORE_PASSWORD: password
  KAFKA_SSL_KEYSTORE_LOCATION: /kafka.server.keystore.jks
  KAFKA_SSL_KEYSTORE_PASSWORD: password
  KAFKA_SSL_KEY_PASSWORD: password
  KAFKA_OPTS: '-Djava.security.auth.login.config=/path/kafka_server_jaas.conf'

当我尝试检查我看到的 docker 日志时

/usr/bin/start-kafka.sh: line 96: KAFKA_OPTS=-Djava.security.auth.login.config: bad substitution

非常感谢任何帮助!

【问题讨论】:

    标签: docker apache-kafka docker-compose jaas sasl


    【解决方案1】:

    更新:他们已修复它,现在已合并!

    https://github.com/wurstmeister/kafka-docker/pull/321

    wurstmeister/kafka 现在存在一个错误,但他们已通过以下解决方法回复我

    我相信他是更大的命名空间冲突问题的一部分 影响多个元素,例如 Kubernetes 部署等(以及 作为其他 KAFKA_ 服务设置)。

    假设您正在引用外部文件 /kafka_server_jaas.conf, 我假设您可以通过添加/安装额外文件;一种 解决方法是指定一个 CUSTOM_INIT_SCRIPT 环境变量,它 应该是类似于以下的脚本:

    #!/bin/bash
    export KAFKA_OPTS="-Djava.security.auth.login.config=/kafka_server_jaas.conf"
    This is executed after the substitution part that is failing.
    

    这可以内联完成,但目前有一个错误 我们如何处理环境,我们需要在哪里指定输入 分隔符以使其正常工作。

    希望这行得通!

    【讨论】:

    • 其实上面的都行不通还在讨论github上的问题。
    【解决方案2】:

    equals '=' 在最后一个值中导致此问题。
    KAFKA_OPTS: '-Djava.security.auth.login.config=/path/kafka_server_jaas.conf'
    这是我调试后得到的。

    + for VAR in $(env)
    + [[ KAFKA_OPTS=- 
    Djava.security.auth.login.config=/path/kafka_server_jaas.conf =~ ^KAFKA_ ]]
    + [[ ! KAFKA_OPTS=- 
    Djava.security.auth.login.config=/path/kafka_server_jaas.conf =~ 
    ^KAFKA_HOME ]]
    ++ echo KAFKA_OPTS=- 
    Djava.security.auth.login.config=/path/kafka_server_jaas.conf
    ++ sed -r 's/KAFKA_(.*)=.*/\1/g'
    ++ tr '[:upper:]' '[:lower:]'
    ++ tr _ .
    + kafka_name=opts=-djava.security.auth.login.config
    ++ echo KAFKA_OPTS=- 
    Djava.security.auth.login.config=/path/kafka_server_jaas.conf
    ++ sed -r 's/(.*)=.*/\1/g'
    + env_var=KAFKA_OPTS=-Djava.security.auth.login.config
    + grep -E -q '(^|^#)opts=-djava.security.auth.login.config=' 
    /opt/kafka/config/server.properties
    start-kafka.sh: line 96: KAFKA_OPTS=-Djava.security.auth.login.config: bad 
    substitution
    

    这是执行此操作的代码。

    88  for VAR in $(env)
    89  do
    90    if [[ $VAR =~ ^KAFKA_ && ! $VAR =~ ^KAFKA_HOME ]]; then
    91      kafka_name=$(echo "$VAR" | sed -r 's/KAFKA_(.*)=.*/\1/g' | tr '[:upper:]' '[:lower:]' | tr _ .)
    92      env_var=$(echo "$VAR" | sed -r 's/(.*)=.*/\1/g')
    93      if grep -E -q '(^|^#)'"$kafka_name=" "$KAFKA_HOME/config/server.properties"; then
    94          sed -r -i 's@(^|^#)('"$kafka_name"')=(.*)@\2='"${!env_var}"'@g' "$KAFKA_HOME/config/server.properties" #note that no config values may contain an '@' char
    95      else
    96          echo "$kafka_name=${!env_var}" >> "$KAFKA_HOME/config/server.properties"
    97      fi
    98    fi
    99
    100    if [[ $VAR =~ ^LOG4J_ ]]; then
    101      log4j_name=$(echo "$VAR" | sed -r 's/(LOG4J_.*)=.*/\1/g' | tr '[:upper:]' '[:lower:]' | tr _ .)
    102      log4j_env=$(echo "$VAR" | sed -r 's/(.*)=.*/\1/g')
    103      if grep -E -q '(^|^#)'"$log4j_name=" "$KAFKA_HOME/config/log4j.properties"; then
    104          sed -r -i 's@(^|^#)('"$log4j_name"')=(.*)@\2='"${!log4j_env}"'@g' "$KAFKA_HOME/config/log4j.properties" #note that no config values may contain an'@' char
    105      else
    106          echo "$log4j_name=${!log4j_env}" >> "$KAFKA_HOME/config/log4j.properties"
    107      fi
    108    fi
    109  done
    

    【讨论】:

    • 谢谢,但没有真正回答我目前如何配置这个值。
    • 您可以通过以下步骤来克服这种情况:1:创建一个Dockerfile
    • 您可以通过以下步骤来克服这种情况:1:创建一个Dockerfile
      2:扩展原始docker镜像
      3。创建一个新脚本,在“$KAFKA_HOME/config/server.properties”中附加所需选项
      4:复制新脚本并更改 docker 入口点
      5:不要在 docker-compose 中为 KAFKA_OPTS 设置环境变量.yml
    猜你喜欢
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2020-05-18
    相关资源
    最近更新 更多