2017-02-15 39 views
1

我試圖構建一個dockerfile。我早些時候嘗試使用硬編碼路徑爲我的項目和輸出是好的。但是,只要我開始使用變量,java代碼就停止執行。無法在Docker入口點命令中使用變量

Dockerfile

FROM java:7 
EXPOSE 7100 

ARG version 
ENV version=$version 
RUN echo $version 

RUN mkdir -p /cacheDir/services/live/prediction/p7100/$version/logs 
RUN ls -tlr /cacheDir/services/live/prediction/p7100/ 

RUN mkdir -p /cacheDir/services/releases/prediction/p7100/$version/ 

RUN mkdir -p /cacheDir/services/predictionmodel 
ADD target/predictionDependencies/star /cacheDir/services/predictionmodel/ #star here is the operator (*), it was being interpret as comments by this stackoverflow editor. 

ADD /target/prediction-0.0.13-SNAPSHOT.jar /cacheDir/services/releases/prediction/p7100/$version/prediction-0.0.13-SNAPSHOT.jar 

ADD /target/instance.properties /cacheDir/services/releases/prediction/p7100/$version/instance.properties 

ADD /target/logback.xml /cacheDir/services/releases/prediction/p7100/$version/logback.xml 

RUN ls -ltr /cacheDir/services/live/prediction/p7100/$version/ 
RUN ls -ltr /cacheDir/services/releases/prediction/p7100/$version/ 
RUN ls -ltr /cacheDir/services/predictionmodel 

ENTRYPOINT java -server -Xmx2g -Xloggc:/cacheDir/services/live/prediction/p7100/$version/logs/gc.log -verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/cacheDir/services/live/prediction/p7100/$version/oom.dump -Dlogback.configurationFile=/cacheDir/services/releases/prediction/p7100/$version/logback.xml -Dlog.home=/cacheDir/services/live/prediction/p7100/$version/logs -Dlogback.debug=true -Dbroker.l^Ct=sv-kafka6.pv.sv.nextag.com:9092,sv-kafka7.pv.sv.nextag.com:9092,sv-kafka8.pv.sv.nextag.com:9092,sv-kafka9.pv.sv.nextag.com:9092 -jar /cacheDir/services/releases/prediction/p7100/$version/prediction-0.0.13-SNAPSHOT.jar 7100 /cacheDir/services/releases/prediction/p7100/$version/instance.properties /com/wizecommerce/services/qa & 

命令用來構建圖像。

docker build --build-arg version=0.0.14-SNAPSHOT -t prediction:0.0.14-SNAPSHOT . 

該圖像似乎是成功的。但是,當我運行該命令時,容器就會自行退出。使用的運行命令:

docker run -p 7100:7100 -v ~/PredictionVolume/logs/:/cacheDir/services/live/prediction/p7100/0.0.14-SNAPSHOT/logs/ -t prediction:0.0.14-SNAPSHOT 

而當試圖查看正在運行的容器時,它未運行。

我試着用這兩種解決方案工作,但我沒有找到任何解決方案。

How do I use Docker environment variable in ENTRYPOINT array?

其他解決方案是我用替換下面的入口點的命令與這一個。

ENTRYPOINT ["sh","-c","java","-server","-Xmx2g","-Xloggc:/cacheDir/services/live/prediction/p7100/${version}/logs/gc.log","-verbose:gc","-XX:+PrintGCDateStamps","-XX:+PrintGCDetails","-XX:+HeapDumpOnOutOfMemoryError","-XX:HeapDumpPath=/cacheDir/services/live/prediction/p7100/${version}/oom.dump","-Dlogback.configurationFile=/cacheDir/services/releases/prediction/p7100/${version}/logback.xml","-Dlog.home=/cacheDir/services/live/prediction/p7100/${version}/logs","-Dlogback.debug=true","-Dbroker.l^Ct=sv-kafka6.pv.sv.nextag.com:9092,sv-kafka7.pv.sv.nextag.com:9092,sv-kafka8.pv.sv.nextag.com:9092,sv-kafka9.pv.sv.nextag.com:9092","-jar","/cacheDir/services/releases/prediction/p7100/${version}/prediction-0.0.13-SNAPSHOT.jar","7100","/cacheDir/services/releases/prediction/p7100/${version}/instance.properties","/com/wizecommerce/services/qa","&"] 

但隨着該命令的輸出來等,如果鍵入顯示所有可用使用的選項的終端上的java將在屏幕(終端)上顯示。

任何人都可以請建議出路嗎? 謝謝!

回答

4

試試這個:

ENTRYPOINT ["sh","-c","java -server -Xmx2g ..."] 

當您使用sh -c,它需要一個說法,是要運行的命令,用空格分開的參數,就好像你進入它的命令行上。您目前正在運行java並將一些其他不適當的參數傳遞給sh

此外,在最後擺脫&符號& - 你不想嘗試和背景的過程。

+0

非常感謝,@ jonathon-reinhart。我非常感謝它,特別是對於重點的解釋。它工作得很好。 –