无法在Docker Entrypoint命令中使用variables

我正在尝试构build一个dockerfile。 我以前尝试使用硬编码path为我的项目和输出是好的。 但是,一旦我开始使用一个variables,java代码停止执行。

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 & 

用于构build图像的命令。

 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 

当试图查看正在运行的容器时,它没有运行。

我尝试过使用这两种解决scheme,但没有一个能够解决问题。

如何在ENTRYPOINT数组中使用Docker环境variables?

其他的解决scheme是,我用这个replace下面的ENTRYPOINT命令。

 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","&"] 

但是使用这个命令的输出就像在terminal上键入java一样,显示所有可用的选项将显示在屏幕(terminal)上。

任何人都可以请build议出路? 谢谢!!!

尝试这个:

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

当你使用sh -c ,它需要一个单独的参数,就是要运行的命令,空格分隔参数,就像你在命令行input一样。 你目前只运行java ,并将一些额外的不适当的parameter passing给sh

此外,摆脱&符号&最后 – 你不想尝试和背景的过程。