docker有java-jar但有参数?

docker有java-jar但有参数?,java,docker,Java,Docker,我想知道是否有可能做到以下几点 我有一个java(和gradle)的小应用程序 我试图在一个容器中设置它,所以我创建了Dockerfile,并且工作得很好,直到我必须设置一个参数 要在空闲状态下本地运行,我设置以下程序参数: 服务器应用程序-local.yml 这实际上加载了一个具有许多属性的文件,如果没有这些属性,应用程序将失败 在我的文件上我有这个 FROM openjdk:8-jdk-alpine USER root:root ENV NAME test LABEL maintaine

我想知道是否有可能做到以下几点

我有一个java(和gradle)的小应用程序

我试图在一个容器中设置它,所以我创建了Dockerfile,并且工作得很好,直到我必须设置一个参数

要在空闲状态下本地运行,我设置以下程序参数:

服务器应用程序-local.yml

这实际上加载了一个具有许多属性的文件,如果没有这些属性,应用程序将失败

在我的文件上我有这个

FROM openjdk:8-jdk-alpine

USER root:root
ENV NAME test

LABEL maintainer="myself"

WORKDIR /opt/apps

COPY build/libs/myapp.jar /opt/apps/myapp.jar

EXPOSE 8080

CMD ["java", "myapp.jar"]
我想知道我是否能做到以下几点:

CMD ["java", "-server:application-local.yml", "myapp.jar"]
但是不起作用,我也做不到

java -jar myapp.jar -server:application-local.yml 
根本什么都不做 不想做gradleBuild,因为它应该只在我的docker映像中使用java

你知道怎么做吗

编辑:

因此,我已经做了以下工作,将我的application-local.yml移动到一个我可以复制并添加此文件的文件夹中

COPY some-path/application-local.yml /opt/apps/local.yml
并为此移动了CMD

CMD ["java", "myapp.jar", "server", "local.yml"]
我仍然会遇到同样的错误,基本上无法解析yml文件中的值

编辑2---


基本上,我不能做的是弄清楚如何将
应用程序.default.yml
作为配置文件发送,我还意识到-server没有任何功能,是我的配置文件,我无法加载它,在使用
java
命令时,它不在jar中(正常行为)

,争论的顺序很重要

首先放置java选项,如
-server
,然后放置
-jar…
或直接运行类的类名,然后放置应用程序参数

运行应用程序的正确方法是:

CMD ["java", "-jar", "myapp.jar", "server", "application-local.yml"]
还有一个问题,您只是将最终的jar文件复制到docker容器中,因此它找不到
应用程序local.yml
文件,请将此文件也复制到docker容器中

COPY build/libs/application-local.yml /opt/apps/application-local.yml

为什么
-server:appl…
(减号和冒号)而不仅仅是
server appl…
(参数之间的空格,甚至分隔的字符串)?从未尝试过,但上面不一致:参数
服务器应用程序本地.yml
在任何方面都不匹配
-server:application.yml
我不明白/明白你的意思:|在将应用程序加载到容器之前,你需要弄清楚如何打包并从命令行启动它。您的问题建议您使用IDE运行应用程序。IDE配置了两件我在命令行调用中看不到的东西:包含main方法的类的名称和类路径。从IDE创建一个jar,并在命令行中尝试:java-cp server application-local.yml如果可以,您应该在docker映像中使用该命令。CMD将从容器中(而不是从主机)查找文件application-local.yml。。。我没看到你在这里复制它。您是通过一个compose文件运行应用程序(并将其复制到那里),还是实际上缺少了这个文件?应用程序已经打包在一个jar中,我现在将配置复制到主路径,并以其他方式将其作为参数发送(但现在我收到另一个错误)错误:无法访问jarfile…谢谢,但我已经这样做了(关于我的问题)我还必须说,文件是application-default.yml,似乎在任何地方都没有引用(所以我打赌gradle项目的默认名称是什么?我猜是application.properties)