Передайте аргументы командной строки в приложение Java (Spring Boot), работающее в Docker - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь передать аргументы командной строки в основной метод Spring Boot приложения, работающего в Docker-контейнере .Запустив из командной строки, я бы сделал что-то вроде этого:

 $ mvn spring-boot:run -Dspring-boot.run.arguments=--greeting=Hello,--recipient=World

Приложению необходимо подобрать эти аргументы и выполнить с ними некоторую обработку:

public static void main(String[] args) {
    Options options = new Options();

    Option greeting = new Option("-g", "greeting", true, "Greeting");
    greeting.setRequired(true);
    greeting.addOption(greeting);

    Option recipient = new Option("-r", "recipient", true, "Recipient");
    recipient.setRequired(true); 
    recipient.addOption(recipient);

    try {
        cmd = parser.parse(options, args);
    } catch (ParseException e) {
        System.out.println(e.getMessage());
        formatter.printHelp("utility-name", options);
        System.exit(1);
    }

    // Do some processing using these args ...

    // Run the Spring Boot app
    SpringApplication.run(SpringBootApp.class, args);
}

Я попробовал простопередача их с использованием флага -e:

docker run -p 8080:8080 -d -e "greeting=Hello" -e "recipient=World" test-image

My Dockerfile выглядит следующим образом:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY ./target/spring-boot-app-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

Поскольку требуются параметры (аргументы), я продолжаю получать сообщение об ошибкеи приложение выходит.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Вы можете попробовать изменить ENTRYPOINT в вашем Dockerfile следующим образом:

ENTRYPOINT exec java -jar -Dspring-boot.run.arguments=--greeting=Hello,--recipient=World

Или вы можете передать аргумент при запуске:

docker run -p 8080:8080 test-image --recipient="World"--greeting="Hello"
0 голосов
/ 30 января 2019

Вы можете предоставить все аргументы командной строки сразу после имени вашего образа докера в команде run.

Пример:

docker run -p 8080:8080 test-image --recipient="World"--greeting="Hello"
...