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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 14:38:35  来源:igfitidea点击:

How to pass System property to docker containers?

javadocker

提问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.shENTRYPOINT for the Docker container, make sure to use the array syntax, e.g.:

也可以将以下start.shENTRYPOINT 用于 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.shfile, 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!

希望能帮助到你!