Итак, я знаю, что вы можете передавать переменные среды в контейнер докеров, используя -e, например:

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

Но мне нужно передать свойство системы в контейнер докера, потому что я запускаю свой JAR следующим образом:

java -Denvironment=dev -jar myjar.jar 

Итак, как я могу передать свойство -D System в Docker? Подобно:

docker run -it {INSERT Denvironment here} myDockerImage
16
feco 29 Окт 2015 в 10:53

4 ответа

Лучший ответ

Используйте переменную, которую вы передали в контейнер в java-команде:

docker run -it -e "ENV=dev" myDockerImage
java -Denvironment=$ENV -jar myjar.jar
22
michaelbahr 29 Окт 2015 в 08:00

Есть файл 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"]
0
naimdjon 24 Мар 2020 в 21:43

Еще один способ сделать это, если вы работаете под Tomcat, - это установить системные переменные в Dockerfile с помощью ENV JAVA_OPTS следующим образом:

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

Надеюсь, это поможет!

2
jmizv 2 Дек 2020 в 18:06

Также можно использовать следующий start.sh ENTRYPOINT для контейнера Docker, обязательно используйте синтаксис массива, например:

< EM> 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 myDockerImage "-Dvar=var1"
3
DevNG 22 Сен 2016 в 15:38