如何将System属性传递给docker容器?

时间:2015-10-29 07:53:17

标签: java docker

所以我知道你可以使用-e将环境变量传递给docker容器:

docker run -it -e "var=var1" myDockerImage

但是我需要将一个System Property传递给docker容器,因为这就是我运行JAR的方式:

java -Denviroment=dev -jar myjar.jar 

那么如何在Docker中传递-D System属性?像:

docker run -it {INSERT Denviroment here} myDockerImage

4 个答案:

答案 0 :(得分:18)

使用您在java命令中传递给容器的变量:

docker run -it -e "ENV=dev" myDockerImage
java -Denvironment=$ENV -jar myjar.jar

答案 1 :(得分:2)

还可以对Docker容器使用以下start.sh ENTRYPOINT,确保使用数组语法,例如:

Dockerfile:

...
ENTRYPOINT ["/start.sh"]

实际的 start.sh 脚本:

#!/bin/bash
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
exec $JAVA_HOME/bin/java -jar myjar.jar $@

然后,您可以直接将Java系统属性作为docker run container arguments传递给您的应用程序:

docker run myDockerImage "-Dvar=var1"

答案 2 :(得分:2)

如果在Tomcat下运行,另一种实现方法是使用ENV JAVA_OPTS在Dockerfile中设置系统变量,如下所示:

ENV JAVA_OPTS="-Djavax.net.ssl.trustStore=C:/tomcatDev.jks -D_WS_URL=http://some/url/"

希望有帮助!

答案 3 :(得分:0)

有一个start.sh文件,例如:

#!/usr/bin/env sh
exec java -Djava.security.egd=file:/dev/./urandom $* -jar /app.jar

在您的Dockerfile中:

...
COPY start.sh /start.sh
RUN chmod a+rx /start.sh
ENTRYPOINT ["/start.sh"]