2016-11-10 55 views
0

碼頭必須在構建階段啓動java/undertow應用程序,並且它應該在運行階段可用。然而,在啓動java進程後,與啓動java服務器相關的容器更改不會持久。碼頭集裝箱不能在後臺啓動Java

因此,在此步驟中所做的更改不會影響圖像。

在我的搬運工文件最後的命令是

RUN java -jar /svc/app/svc-0.0.1-SNAPSHOT.jar $2>server.log & sleep 5 

當我運行這個容器我可以看到在server.log文件確認服務器啓動成功

StartServices  - Services Started 

但是,當存在輸出I運行容器沒有服務正在運行。我可以手動啓動它,但這不是我想要做到的。我希望我的服務器在容器啓動時啓動。

通知

& sleep 5 

如果我不等待,這5秒鐘這將是沒有任何日誌中創建。 Docker會立即放棄這一步,而不會讓我的Java應用程序啓動。

但即使「睡眠5」讓我的應用程序啓動,碼頭工仍然忽略圖像中的更改並且不應用它們。

所以,當我做「碼頭運行」我的應用程序沒有運行。

這裏是Dockerfile:

FROM anapsix/alpine-java 
ENV TC_BASE=/opt/tc_base 
ENV APP_BASE=$TC_BASE/svc 
ENV PATH=.:$PATH 


RUN apk update && apk add unzip 


COPY files/build/lib/svc/target/svc-0.0.1-SNAPSHOT-bin.zip $APP_BASE/ 
COPY files/build/lib/api/src/main/resources/api.properties $TC_BASE/conf/api/ 
COPY files/build/lib/svc/src/main/resources/svc.properties $TC_BASE/conf/svc/ 
COPY files/build/lib/svc/src/main/resources/logback.xml $TC_BASE/conf/svc/ 

RUN cd $APP_BASE ; unzip -q svc-0.0.1-SNAPSHOT-bin.zip ; rm svc-0.0.1-SNAPSHOT-bin.zip ; mv svc-0.0.1-SNAPSHOT/* . ; rm -rf svc-0.0.1-SNAPSHOT 

EXPOSE 7009 

RUN java -jar $TC_BASE/svc/app/svc-0.0.1-SNAPSHOT.jar $2>server.log & sleep 5 
+0

如果沒有正在等待的進程,Docker將始終停止容器。你應該'尾巴-f server.log' –

+0

我們正在談論建設形象。在這個階段沒有人對服務器日誌感興趣。如果我做了tail -f server.log,那麼構建過程將永遠不會結束。 Java過程應作爲圖像設置的一部分在後臺運行。 –

+3

如果你需要在容器運行時運行一些東西,你需要把它放在你的'ENTRYPOINT'或者'CMD'(或者組合)中。如果這是編排和開始多件事情,那麼你可能需要一個入口點腳本。這一切聽起來有點亂。爲什麼你需要在容器中運行多個東西? – johnharris85

回答

1

那麼,它應該是入口點無法運行。入口點在容器啓動時被調用,並且它是我需要的。 RUN在構建時執行,但它隻影響文件系統。 Docker鏡像不包含應用程序的執行狀態,因此當創建鏡像時,它沒有關於已經啓動的應用程序的信息。爲了啓動應用程序,他們必須設置爲入口點