泊坞窗。 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 build
和docker-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