将命令行参数传递给在 Docker 中运行的 Java 应用程序(Spring Boot)

我正在尝试将命令行参数传递给在Docker 容器中运行的Spring Boot应用程序的主要方法。从命令行运行,我会做这样的事情:


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

应用程序需要提取这些 args 并对它们进行一些处理:


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

我的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"]

由于需要选项(args),我不断收到错误消息并且应用程序退出。


喵喵时光机
浏览 552回答 2
2回答

素胚勾勒不出你

您可以在run命令中的 docker 映像名称之后提供所有命令行参数。例子:docker run -p 8080:8080 test-image --recipient="World"--greeting="Hello"

撒科打诨

您可以尝试像这样修改您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"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java