Java 使用jib部署命令行界面应用程序

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

好的,我正在构建一个基于jib的docker映像,其中包含一个JavaCLI应用程序。应用程序的运行方式如下:

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
    
    
  • 在容器内运行
    sh
    ,然后使用shell

    (这需要在映像中安装
    sh
    程序。到目前为止,Jib默认使用没有外壳程序的基础映像(将来可能会更改),因此您需要指定不同的基础映像,例如使用
    Jib.from.image
    配置选项。)

    在另一个终端中,您可以使用命令
    sleep infinity
    验证名为“my running container”的容器是否正在运行:
    $ 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