java - 接受 Commons CLI 风格参数的控制台应用程序的 Dockerfile

标签 java docker dockerfile apache-commons-cli

我有一个 java 控制台应用程序,我将其打包为 jar 并将其运行为

java -jar target/myProject-1.0-SNAPSHOT.jar -arg1 145 -arg2 345 -arg3 99

我想在容器内运行相同的命令并将这些参数(arg1、arg2、arg3)传递给 docker run 命令。我的 docker 文件如下所示:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD target/myProject-1.0-SNAPSHOT.jar myProject-1.0-SNAPSHOT.jar
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /myProject-1.0-SNAPSHOT.jar" ]

然后我尝试按如下方式运行图像:

docker run myProject:0.3 -e  -arg1 145 -arg2 345 -arg3 99

但是我的程序没有得到参数。我缺少什么?

最佳答案

您必须在 DOCKERFILE 中添加 ENV 命令,以便可以接收传入的参数,然后将其传递到 ENTRYPOINT 脚本

Dockerfile 看起来像这样

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ENV arg1
ENV arg2
ENV arg3
ADD target/myProject-1.0-SNAPSHOT.jar myProject-1.0-SNAPSHOT.jar
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /myProject-1.0-SNAPSHOT.jar ${arg1} ${arg2} ${arg3}" ]

如果您有任何疑问,请告诉我

关于java - 接受 Commons CLI 风格参数的控制台应用程序的 Dockerfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53772769/

相关文章:

docker - 如何运行使用 go binary 创建的 docker 容器?

java - 玻璃鱼 :MessageBodyProviderNotFoundException in Jersy Client

c# - 接口(interface)实现及常用功能

django - Postgres django.db.utils.OperationalError : could not connect to server: Connection refused

mysql - Docker gogs 连接被 mysql 容器拒绝

amazon-web-services - Docker在镜像创建之后和容器启动之前添加文件

java - maven-jaxb2-plugin 在同一项目中重用公共(public) XSD

java - Bloch 的 Effective Java 第 2 版中常量字段的定义

html - Docker - 在 docker 中运行 HTML 文件

docker - 如何从 docker run 命令给 Dockerfile 输入参数