Ответ 1
Используйте переменную, которую вы передали в контейнер в команде java:
docker run -it -e "ENV=dev" myDockerImage
java -Denvironment=$ENV -jar myjar.jar
Итак, я знаю, что вы можете передавать переменные окружения в Docker-контейнер, используя -e, например:
docker run -it -e "var=var1" myDockerImage
Но мне нужно передать системное свойство в контейнер докера, потому что так я запускаю свой JAR файл:
java -Denvironment=dev -jar myjar.jar
Итак, как я могу передать системное свойство -D в Docker? Как:
docker run -it {INSERT Denvironment here} myDockerImage
Используйте переменную, которую вы передали в контейнер в команде java:
docker run -it -e "ENV=dev" myDockerImage
java -Denvironment=$ENV -jar myjar.jar
Можно также использовать следующий start.sh
ENTRYPOINT для контейнера Docker, не забудьте использовать синтаксис массива, например:
Dockerfile:
...
ENTRYPOINT ["/start.sh"]
Фактический start.sh script:
#!/bin/bash
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
exec $JAVA_HOME/bin/java -jar myjar.jar [email protected]
Затем вы можете просто передать свойства системы Java непосредственно в приложение как аргументы контейнера запуска docker:
docker run myDockerImage "-Dvar=var1"