如何在docker中运行可执行jar

一个jar需要在docker中部署。我知道如何为正在运行的jar编写Dockerfile。 这个jar是一个命令行选项application.it有多个参数,并将需要用不同的参数运行多次。 例如,它有arg1,arg2。

用户可以运行arg1 = A,arg2 = B然后运行arg1 = A2.No arg2。

docker不能运行这个,运行时指定了这些参数。一旦jar主任务完成,容器就会停下来。需要启动另一个容器来运行jar。

不要以为这是友好的。我的问题是

在这种情况下,是不是适合与docker工人?

您可以将容器configuration为运行一个永不停止的脚本,以保持容器的运行。 作为一个例子,你可以在Dockerfile中包含以下内容:

 RUN echo 'sleep infinity' >> /bootstrap.sh && chmod +x /bootstrap.sh 

您可以通过以下方式启动容器:

 docker run -d --name <container-name> <image> ./bootstrap.sh 

要运行jar,你可以使用:

 docker exec <container-name> java [arguments] 

考虑到这是一个Java程序,它是操作系统不可知的,你没有在容器内运行的巨大好处,但是可能的。

你可以使用一个简单的“黑客”来达到这个目的…但是我不认为这是最好的解决scheme。

用一个不应该很快结束的进程启动一个容器,比如bash 。 另外,让我们说你想使用最新的Ubuntu的图像。 然后你可以启动容器:

 $ docker run -d -it ubuntu bash 

这启动了一个Ubuntu容器,并保持它作为守护进程编辑运行:detached( -d )在后台。

让我们查看容器的名字:

 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES 59104211e795 ubuntu "bash" 2 seconds ago Up 1 seconds jolly_hawking 

这是快活的 。 您的命令(这里: ls / )可以通过以下命令发送到容器:

 $ docker exec jolly_hawking ls / 

但这绝对不是最好的解决scheme。 也许只是保持这个作为一个例子,这可能适用于你和Docker容器如何工作。