所以我知道你可以使用-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
答案 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"]