2016-10-04 95 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

相關問題