如何在 kafka-ui docker 镜像中设置 swarm 环境变量

问题描述 投票:0回答:1

我拍摄了 Kafka UI 镜像(provectuslabs/kafka-ui:v0.7.1): https://hub.docker.com/layers/provectuslabs/kafka-ui/master/images/sha256-633606ca07677d1c4b9405c5df1b6f0087aa75b36528a17eed142d06f65d0881?context=explore

我想在启动 Kafka UI 之前执行脚本。

我不想将秘密存储在 docker compose 文件中,所以我使用 docker swarm 秘密。它们存储在/run/secrets/... 这些秘密存储在 docker 文件中,因此我使用 sh 脚本将它们转换为环境变量。 代码链接:https://github.com/swarm-pack/swarm-sync/blob/master/env_secrets_expand.sh

#!/bin/bash

env_secret_expand() {
    var="$1"
    eval val=\$$var
    if secret_name=$(expr match "$val" "DOCKER-SECRET->\([^}]\+\)$"); then
        secret="${ENV_SECRETS_DIR}/${secret_name}"
        env_secret_debug "Secret file for $var: $secret"
        if [ -f "$secret" ]; then
            val=$(cat "${secret}")
            export "$var"="$val"
            env_secret_debug "Expanded variable: $var=$val"
        else
            env_secret_debug "Secret file does not exist! $secret"
        fi
    fi
}

env_secrets_expand() {
    for env_var in $(printenv | cut -f1 -d"=")
    do
        env_secret_expand $env_var
    done
}

env_secrets_expand

为了能够执行 bash 脚本,我将以下行添加到 docker 文件中:

FROM provectuslabs/kafka-ui:v0.7.1

# Secret for swarm
USER root
COPY env_secrets_expand_ui.sh /env_secrets_expand_ui.sh
RUN chmod +x /env_secrets_expand_ui.sh

RUN apk add --no-cache bash

EXPOSE 8080

CMD /env_secrets_expand_ui.sh && java --add-opens java.rmi/javax.rmi.ssl=ALL-UNNAMED -jar kafka-ui-api.jar

在日志中,我看到 bash 脚本正在运行,但 kafka-ui 忽略这些变量,而是使用 docker compose 中指定的模板:

  SPRING_SECURITY_USER_NAME: DOCKER-SECRET->kafka_ui_user
  SPRING_SECURITY_USER_PASSWORD: DOCKER-SECRET->kafka_ui_password

链接到上一个问题:如何将我的脚本嵌入到图像 kafka-ui

如何从 docker swarm 设置 kafka-ui 的环境变量?

docker sh docker-swarm docker-entrypoint provectuslabs-kafka-ui
1个回答
0
投票

这按预期工作。您在脚本中导出的环境变量不会被持久化,因为它们不是通过 dockerfile 中的“ENV”指令设置的。

这里的一个解决方案是通过 docker compose 本身使用秘密:source

© www.soinside.com 2019 - 2024. All rights reserved.