0

I took the Kafka UI image (provectuslabs/kafka-ui:v0.7.1): https://hub.docker.com/layers/provectuslabs/kafka-ui/master/images/sha256-633606ca07677d1c4b9405c5df1b6f0087aa75b36528a17eed142d06f65d0881?context=explore

I want to execute my script before starting Kafka UI, but I get the error script not found.

FROM provectuslabs/kafka-ui:v0.7.1

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

EXPOSE 8080

ENTRYPOINT ["/script.sh"]

CMD ["/bin/sh" "-c" "java --add-opens java.rmi/javax.rmi.ssl=ALL-UNNAMED  $JAVA_OPTS -jar kafka-ui-api.jar"]

Error: exec /script.sh: no such file or directory

I was able to do this trick with other images, for example with the image bitnami/kafka. But I can't figure out how to do it with this image provectuslabs/kafka-ui:v0.7.1.

ADDITION: I don't want to store secrets in docker compose files, so I use docker swarm secrets. They are stored in /run/secrets/... The secrets are stored in docker files, so I use the sh script to turn them into environment variables. Code link: 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

In order to be able to execute the bash script, I added the line to the docker file:

RUN apk add --no-cache bash

In the logs I see that the bash script is running, but kafka-ui ignores these variables, instead using the templates that are specified in the docker compose:

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

1 Answer 1

1

If I understand you correctly then you want to run script.sh and then proceed with the normal startup of the base image. Try this:

FROM provectuslabs/kafka-ui:v0.7.1

USER root

COPY script.sh /script.sh

RUN chmod +x /script.sh

EXPOSE 8080

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

In the screenshot below you can see the result of a simple script.sh that runs before the main Kafka UI job starts.

#!/bin/sh

echo "Hello, World!"

enter image description here

Sign up to request clarification or add additional context in comments.

2 Comments

Thank you very much for your help, I couldn’t immediately understand what the problem was. I figured out the first errors and added to the question.
Aha! But now you seem to have changed the problem. The original issue was that you were getting the "no such file or directory" error. But now you have a problem with environment variables. This is really a separate issue and should be a separate question.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.