Docker - 传递env变量

时间:2018-04-09 05:25:19

标签: docker

我有一个泊坞文件,如下所示。

FROM docker.test.com/jdk/jdk1.8:latest

RUN mkdir -p /opt/test/emp

COPY application/emp-service.war /opt/test/emp/

ENV SERVER_SSL_TRUSTSTORE=/certs/cacert
ENV SERVER_SSL_KEYSTORE=/certs/emp-test.com.jks

CMD java -jar /opt/test/emp/emp-service.war --spring.config.location=file:/conf/application.properties -Dlogging.config=/conf/logback.xml

我应该有application.property,

  

server.ssl.keyStore = PATH / TO /密钥库

但是,我不想硬编码。因此,在这里有一些路径,并在运行docker时将其作为一个卷传递,如下所示。

  

docker run -v LOCAL_PATH / emp-test.com.jks:/certs/emp-test.com.jks   测试服务

但是,我仍然收到以下错误。

Caused by: java.lang.IllegalArgumentException: Resource location must not be null
    at org.springframework.util.Assert.notNull(Assert.java:134) ~[spring-core-4.3.7.RELEASE.jar!/:4.3.7.RELEASE]
    at org.springframework.util.ResourceUtils.getURL(ResourceUtils.java:131) ~[spring-core-4.3.7.RELEASE.jar!/:4.3.7.RELEASE]
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory.configureSslKeyStore(JettyEmbeddedServletContainerFactory.java:301) ~[spring-boot-1.4.5.RELEASE.jar!/:1.4.5.RELEASE]

我在DockerFile中尝试使用-Dserver.ssl.keyStore,如下所示,但错误仍然相同。

  

CMD java -jar /opt/test/emp/emp-service.war   --spring.config.location = file:/conf/application.properties -Dlogging.config = / conf / logback.xml -Dserver.ssl.keyStore = / certs / emp-test.com.jks

我错过了什么吗?

我知道,这可以通过Docker compose来完成。但我只想使用docker run运行。

2 个答案:

答案 0 :(得分:0)

您可以使用泊坞窗文件中的VOLUME和docker文件的ENV将本地卷(具有ssl证书的卷)映射到容器,并传入与容器对应的位置。

答案 1 :(得分:0)

docker run -e "foo=bar" ....允许您在容器内设置环境变量。然后,您的应用程序可以读取该env变量,如果未提供则失败。同样也适用于撰写,泊坞群和kubernetes。

请参阅documentation of docker run