无法在Docker Entrypoint命令中使用变量

Tus*_*dhi 1 java docker dockerfile

我正在尝试构建一个dockerfile.我之前尝试过为我的项目使用硬编码路径,输出很好.但是,一旦我开始使用变量,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 &
Run Code Online (Sandbox Code Playgroud)

用于构建图像的命令.

docker build --build-arg version=0.0.14-SNAPSHOT -t prediction:0.0.14-SNAPSHOT .
Run Code Online (Sandbox Code Playgroud)

图像似乎很成功.但是,当我运行命令时,容器就会自行退出.运行命令使用:

docker run -p 7100:7100 -v ~/PredictionVolume/logs/:/cacheDir/services/live/prediction/p7100/0.0.14-SNAPSHOT/logs/  -t prediction:0.0.14-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)

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

我尝试使用这些我发现的两种解决方案,但似乎没有效果.

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

其他解决方案是我用这个替换了以下的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","&"]
Run Code Online (Sandbox Code Playgroud)

但是使用此命令输出就像是,如果你在终端上键入java,显示所有可用的选项将显示在屏幕(终端)上.

任何人都可以建议出路吗?谢谢!!!

Jon*_*art 6

试试这个:

ENTRYPOINT ["sh","-c","java -server -Xmx2g ..."]
Run Code Online (Sandbox Code Playgroud)

当您使用sh -c,它需要一个单一的即是命令的参数来运行,用空格分开的参数,就好像你进入它的命令行上.你现在正在运行java并传递一堆额外的不适当的参数sh.

另外,最后摆脱&符号&- 你不想尝试背景这个过程.