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

标签 java spring-boot docker dockerfile command-line-arguments

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

 $ 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

我的 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) 是必需的,我不断收到错误消息并退出应用程序。

最佳答案

您可以在 run 命令中的 docker 镜像名称之后提供所有命令行参数。

示例:

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

关于java - 将命令行参数传递给在 Docker 中运行的 Java 应用程序 (Spring Boot),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54429751/

相关文章:

docker-compose - 公开链接服务端口

java - 比较两个词

spring - 无法导入Spring RepositoryRestResource

spring-mvc - 从文件系统提供静态资源| Spring 启动网

r - Pmetrics : declare default fortran compiler before calling PMBuild()

docker - etcd 集群设置失败

java - "Multi-level"泛型,带有子类化和接口(interface)

java - 如何根据视角修改 Java 编辑器的上下文菜单?

java - 安卓 : How to delete after so many characters?

spring-boot - Spring boot - 仅当 bean JavaMailSender 存在时才自动配置