泊坞窗。 Spring应用程序。 设置和获取环境variables

我试图dockerize我的Spring应用程序。

问题:我无法从Docker容器中获取Spring应用程序中的环境variables。

Springconfiguration(2个选项,单独尝试)

<bean class="java.net.URI" id="dbUrl"> <constructor-arg value="#{systemProperties['JDBC_CONNECTION_STRING']}"/> </bean> <bean class="java.net.URI" id="dbUrl"> <constructor-arg value="#{systemEnvironment['JDBC_CONNECTION_STRING']}"/> </bean> 

也尝试在Java中

 URI dbUrl = URI.create(System.getProperty("JDBC_CONNECTION_STRING")); 

我的dockerconfiguration。 使用docker-compose builddocker-compose up docker-compose build每次更新值。

泊坞窗,compose.yml

 app: build: . command: catalina.sh run ports: - "8888:8080" links: - postgres volumes: - /usr/bin postgres: image: postgres:9.5 ports: - "5432" volumes: - /var/lib/postgresql/data 

Dockerfile

 FROM tomcat:jre8 ENV JDBC_CONNECTION_STRING 'postgres://postgres:password111@postgres:5432/mydb' RUN ["rm", "-fr", "/usr/local/tomcat/webapps/ROOT"] RUN apt-get update && apt-get install -y net-tools postgresql-client COPY ./target/myapp.war /usr/local/tomcat/webapps/ROOT.war CMD ["catalina.sh", "run"] 

一旦我连接到容器的bash, set命令不显示我的variables。 但echo $JDBC_CONNECTION_STRING显示值。

在Java代码中,您使用的是java系统属性,但不是系统环境variables。 为了将系统属性传递给java进程,您需要在运行命令中指定-Dkey = value。

所以如果这是tomcat,你可以在$ JAVA_OPTS =“… -DJDBC_CONNECTION_STRING = $ JDBC_CONNECTION_STRING”

你可以做docker run -e JDBC_CONNECTION_STRING=WHATEVER