如何在Docker中创build和使用variables?

我试图从一个POM文件中获取版本,以便以后可以在另一个命令中使用它。 所以在我的docker文件里面,

RUN VERSION="$(mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version|grep -Ev '(^\[|Download\w+:)')" RUN echo $VERSION 

但回声打印什么。 我真正想要运行的是,

 RUN mv /abc/abc-${VERSION}.jar /abc/abc.jar 

如果你把两条线合在一起,那就行了

RUN VERSION="$(mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version|grep -Ev '(^\[|Download\w+:)')" ; echo $VERSION

推荐的方法当然是Ilya Peterov提出的解决scheme,我怀疑你想在以后的Dockerfile中使用它

我将举另一个例子,如果你有一个脚本在abc / myscript.sh

RUN cd abc ; ./myscript

RUN cd abc RUN ./myscript ,而RUN cd abc RUN ./myscript

会失败,因为它不会在abc目录中

像这样使用ENV ,这是Docker开发人员希望你这样做的方式:

 ENV VERSION "$(mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version|grep -Ev '(^\[|Download\w+:)')" RUN echo $VERSION 

有一个例子是非常类似于你的情况的文档: https : //docs.docker.com/engine/reference/builder/#environment-replacement