Java 如何将系统属性传递给 docker 容器?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/33408626/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to pass System property to docker containers?
提问by feco
So I know you can pass Environment variables to a docker container using -e like:
所以我知道您可以使用 -e 将环境变量传递给 docker 容器,例如:
docker run -it -e "var=var1" myDockerImage
But I need to pass a System Property to a docker container, because this is how I run my JAR:
但是我需要将系统属性传递给 docker 容器,因为这就是我运行 JAR 的方式:
java -Denvironment=dev -jar myjar.jar
So how can I pass a -D System property in Docker? Like:
那么如何在 Docker 中传递 -D System 属性呢?喜欢:
docker run -it {INSERT Denvironment here} myDockerImage
采纳答案by michaelbahr
Use the variable you passed into the container on the java command:
使用您在 java 命令中传递到容器中的变量:
docker run -it -e "ENV=dev" myDockerImage
java -Denvironment=$ENV -jar myjar.jar
回答by DevNG
One can also use the following start.sh
ENTRYPOINT for the Docker container, make sure to use the array syntax, e.g.:
也可以将以下start.sh
ENTRYPOINT 用于 Docker 容器,确保使用数组语法,例如:
Dockerfile:
Dockerfile:
...
ENTRYPOINT ["/start.sh"]
The actual start.shscript:
实际的start.sh脚本:
#!/bin/bash
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
exec $JAVA_HOME/bin/java -jar myjar.jar $@
Then you can just pass the Java system properties directly to your application as docker run container arguments:
然后,您可以将 Java 系统属性作为 docker run 容器参数直接传递给您的应用程序:
docker run myDockerImage "-Dvar=var1"
回答by naimdjon
Have a start.sh
file, e.g.:
有一个start.sh
文件,例如:
#!/usr/bin/env sh
exec java -Djava.security.egd=file:/dev/./urandom $* -jar /app.jar
In your Dockerfile:
在您的 Dockerfile 中:
...
COPY start.sh /start.sh
RUN chmod a+rx /start.sh
ENTRYPOINT ["/start.sh"]
回答by Isidro.rn
One more way to do it, if running under Tomcat, is setting your system variables in your Dockerfile using ENV JAVA_OPTS like this:
如果在 Tomcat 下运行,另一种方法是使用 ENV JAVA_OPTS 在 Dockerfile 中设置系统变量,如下所示:
ENV JAVA_OPTS="-Djavax.net.ssl.trustStore=C:/tomcatDev.jks -D_WS_URL=http://some/url/"
ENV JAVA_OPTS="-Djavax.net.ssl.trustStore=C:/tomcatDev.jks -D_WS_URL= http://some/url/"
Hope it helps!
希望能帮助到你!