Java 使用jib部署命令行界面应用程序
好的,我正在构建一个基于jib的docker映像,其中包含一个JavaCLI应用程序。应用程序的运行方式如下:Java 使用jib部署命令行界面应用程序,java,docker,command-line-interface,jib,Java,Docker,Command Line Interface,Jib,好的,我正在构建一个基于jib的docker映像,其中包含一个JavaCLI应用程序。应用程序的运行方式如下: java-jarapp.jar--opt1= 我想做的是运行一个docker容器,它在容器启动时不做任何事情,但可以随时接受参数,并将参数传递给容器中的JVM应用程序,让它完成它的工作。看起来,当jib docker容器运行时,应用程序运行并自行关闭 我不知道该怎么做。非常感谢您在这方面提供的任何帮助。我认为您试图以一种非传统的方式使用容器,但无论如何,我会留下一个答案 我假设您在D
java-jarapp.jar--opt1=
我想做的是运行一个docker容器,它在容器启动时不做任何事情,但可以随时接受参数,并将参数传递给容器中的JVM应用程序,让它完成它的工作。看起来,当jib docker容器运行时,应用程序运行并自行关闭
我不知道该怎么做。非常感谢您在这方面提供的任何帮助。我认为您试图以一种非传统的方式使用容器,但无论如何,我会留下一个答案
我假设您在Docker运行时运行容器映像
- 在容器中运行
java-jarapp.jar
$ docker run --entrypoint java <your image> -jar app.jar
$ docker run --entrypoint java <your image> -jar app.jar --opt1=some-value
- 在容器内运行
,然后使用shell (这需要在映像中安装sh
程序。到目前为止,Jib默认使用没有外壳程序的基础映像(将来可能会更改),因此您需要指定不同的基础映像,例如使用sh
配置选项。) 在另一个终端中,您可以使用命令Jib.from.image
验证名为“my running container”的容器是否正在运行:sleep infinity
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 51c4568d2d2a debian:buster "sleep infinity" 6 seconds ago Up 3 seconds my-running-container
- 如果要在运行容器中运行应用程序,请执行以下操作
$ docker exec my-running-container java -jar app.jar --opt1=some-value
Docker容器通常运行单个进程。您能否构建Java应用程序以保持运行并接受您描述的输入?在容器中的JVM中运行应用程序比在没有Docker参与的情况下使用JVM有什么好处吗?它基本上是一个命令行应用程序,而不是一个保持运行的web应用程序。一个好处是方便。我们不需要让我们的应用程序在所有平台上都工作(它有一些本机库),我们只需要为linux构建它并保持简单。此外,我们发现使用docker非常简单、容易和统一。@DavidMaze:请参阅上面的评论。我们不希望在运行java应用程序时启动容器。我们希望保持容器运行,并希望在需要时在运行的容器中运行应用程序。主要关注的是在不运行java应用程序的情况下保持容器运行。@500865更新了答案。请参见上文。
正在抛出睡眠缺少操作数的错误。不过我明白了。好主意。你应该把无限
作为参数传递给睡眠
。按照我的方式键入命令。尽管建议(可在更新部分中找到)感觉不整洁,而且有点粗糙,但它确实解决了问题。所以,接受它作为解决方案。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
51c4568d2d2a debian:buster "sleep infinity" 6 seconds ago Up 3 seconds my-running-container
$ docker exec my-running-container java -jar app.jar --opt1=some-value