2016-10-04 92 views
0

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

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

docker无法运行此操作,在运行时指定了这些参数。一旦jar主任务完成,容器就会停止。需要启动另一个容器来运行jar。

不要以为这是friendly.my问题是

在这种情况下,是不适合与码头工人deloy?

+0

你是如何尝试在你的容器中运行这个的? – n2o

+0

定义码头运行参数,并传递它来运行容器 –

+0

我认为你可以在运行容器时传递参数。像这样:'docker run image -a -b -c'。看到这里:http://stackoverflow.com/a/31523657/4151472 – RichArt

回答

1

您可以将容器配置为运行一个永不会停止运行的脚本。 举个例子,你可以包括在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程序,它是操作系统不可知论的,你没有在容器内运行的巨大好处,但是可能的。

+0

实际上,我不指望在container.just中运行任何好处需要部署在docker.c中你澄清如何保持容器运行在script.sorry我没有得到重点。我认为容器生命周期绑定到jar主要任务。 –

+0

容器由pid 1进程驱动。如果进程正在运行,容器也运行。一旦过程结束,容器将停止。 这就是运行java命令时发生的情况。 如果您运行一个包含无限循环的脚本作为pid 1,则容器将永不停止。检查[链接](http://stackoverflow.com/questions/39818938/how-to-keep-an-infinite-loop-running-in-order-to-not-close-a-container-in-docker) 这将允许使用“docker exec”在正在运行的容器中执行命令。 – Mgccon

0

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

使用不应该很快结束的进程启动容器,例如bash。另外,假设你想使用最新的Ubuntu镜像。然后你就可以开始与容器:

$ docker run -d -it ubuntu bash 

这将启动Ubuntu的容器,并保持其运行 作为守护 编辑:在后台分离(-d)。

让查找容器的名字:

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

jolly_hawking。你的命令(在这里:ls /)然后可以发送到容器用这个命令:

$ docker exec jolly_hawking ls/

但是,这绝对不是最好的解决方案。也许只是把它作为一个例子来说明,这可能对你有用,以及Docker容器如何工作。

+0

这与我提出的建议类似,但随着bash超时,容器将停止工作。 运行命令中的-d选项实际上意味着该容器将被“分离”,这意味着一旦关闭了该shell,它就不会停止。 – Mgccon

+0

是的,它是相同的,但支持一个例子。 – n2o

相关问题