Appending key to CATALINA_OPTS using kubernetes

3/20/2020

I have some CATALINA_OPTS properties (regarding database port, user and so on) set up in ConfigMap file. Then, this file is added to the docker image via Pod environment variable. One of the CATALINA_OPTS properties is database password, and it is required to move this from ConfigMap to the Secrets file. I can expose key from Secrets file through environment variable:

apiVersion: v1
kind: Pod
  ...
  containers:
  - name: myContainer
    image: myImage
    env:
    - name: CATALINA_OPTS
      valueFrom:
       configMapKeyRef:
         name: catalina_opts
         key: CATALINA_OPTS
    - name: MY_ENV_PASSWORD
      valueFrom:
        secretKeyRef:
          name: db-pass
          key: my-pass

Thing is, i need to append this password to the CATALINA_OPTS. I tried to do it in Dockerfile:

  RUN export CATALINA_OPTS="$CATALINA_OPTS -Dmy.password=$MY_ENV_PASSWORD"

However, MY_ENV_PASSWORD is not appending to the existing CATALINA_OPTS. When I list my environment variables (i'm checking the log in Jenkins) i cannot see the password. Am I doing something wrong here? Is there any 'regular' way to do this?

-- user739384
configmap
dockerfile
kubernetes

1 Answer

3/20/2020

Dockerfile RUN steps are run as part of your image build step and NOT during your image execution. Hence, you cannot rely on RUN export (build step) to set K8S environment variables for your container (run step).

Remove the RUN export from your Dockerfile and Ensure you are setting CATALINA_OPTS in your catalina_opts ConfigMap like this:

apiVersion: v1
kind: ConfigMap
metadata:
  name: catalina_opts
data:
  SOME_ENV_VAR: INFO
  CATALINA_OPTS: opts... -Dmy.password=$MY_ENV_PASSWORD
-- davidmontoyago
Source: StackOverflow