5
respostas

Variaveis de ambiente, como usar dentro do container

eu consigo por uma variavel de ambiente definida no dockerfile pra ser usada dentro do standalone.xml do servidor jboss ou wildfly ? como que eu faria pra deixar dinamico o datasource por exemplo

5 respostas

Olá Marcos, tudo bem? Bem você quer indicar a variável de ambiente no Dockerfile mesmo é isso? Bem, acho que seria mais tranquilo você indicar a variável de ambiente em um docker-compose.yml assim você não precisa ficar recriando a imagem para passar outras variáveis de ambiente. Sendo Java você consegue indicar as variáveis da seguinte forma:

app:
    image: casadocodigo:v1-dev
    ports: 
      - '8080:8080'
    environment:
      USUARIO: 'root'
      SENHA: 'password'
      JDBC_CONNECTION_STRING: 'jdbc:mysql://beanstalk_mysql:3306/casadocodigo'

E no código você consegue pegar com algo como:

dataSource.setUsername(System.getenv("USUARIO"));
dataSource.setPassword(System.getenv("SENHA"));
dataSource.setUrl(System.getenv("JDBC_CONNECTION_STRING"));

Penso que seria a melhor forma!

Obrigado Jonilson! Eu tinha tentado com expression language direto no standalone.xml, assim

 <security>
        <user-name>${env.USUARIO}</user-name>
        <password>${env.SENHA}</password>
  </security>

Mas o wildfly nao conseguiu resolver a variavel de ambiente na subida do servidor

Certo, mas como você realmente indicou essas variáveis de ambiente? Foi no comando docker run ou foi no Dockerfile realmente? Fala melhor sobre essa parte, e de ante mão acho que você busca exetamente o que esse artigo fala.

Dá uma olhada e fala pra gente se funcionou!

Foi no docker run com -env / -e

SET USUARIO = marcos

docker run -it -d --name jbpm-manager -e USUARIO ....

eu tambem alterei o jboss-cli.xml na tag para true: true

Marcos o comando docker run deveria ser mais ou menos assim:

docker run -it -d --name jbpm-manager -p 8080:8080
    -e USUARIO="user" 
    -e SENHA="mypassword" 
    SUA_IMAGEM_AQUI

E no seu arquivo standalone.xml deveria obter essas imagens da seguinte forma:

    <security>
      <user-name>${env.POSTGRES_USER}</user-name>
      <password>${env.POSTGRES_PASSWORD}</password>
    </security>

Fala se funcionou assim!