Java Docker ARGs don';不能在docker文件中被替换

Java Docker ARGs don';不能在docker文件中被替换,java,docker,Java,Docker,我试图在docker文件中使用ARG,但它不起作用,我是个新手 这是我的docker文件 ARG appver=0.0.1 ENV ausername=any COPY ./target/userservice-${appver}-SNAPSHOT.jar . CMD ["java", "-jar", "userservice-${appver}-SNAPSHOT.jar"] 因此,当我构建映像时,我希望jar名称是 userservice-0.0.1-SNAPSHOT.jar

我试图在docker文件中使用ARG,但它不起作用,我是个新手

这是我的docker文件

 ARG appver=0.0.1
 ENV ausername=any
 COPY ./target/userservice-${appver}-SNAPSHOT.jar .
 CMD  ["java", "-jar", "userservice-${appver}-SNAPSHOT.jar"]
因此,当我构建映像时,我希望jar名称是

 userservice-0.0.1-SNAPSHOT.jar
但我得到的是

Step 9/10 : COPY ./target/userservice-${appver}-SNAPSHOT.jar .
---> 3f2772c50130
Step 10/10 : CMD  ["java", "-jar", "userservice-${appver}-SNAPSHOT.jar"]
---> Running in 47286088595a

Docker不会在CMD步骤中展开build args。你需要做两件事。首先,将构建参数复制到环境变量中。其次,切换到shell语法以扩展该环境变量

ARG appver=0.0.1
ENV ausername=any
ENV appver=${appver}
COPY ./target/userservice-${appver}-SNAPSHOT.jar .
CMD exec java -jar userservice-${appver}-SNAPSHOT.jar

我添加了一个exec,以便在pid 1扩展命令后立即从中删除shell。这有助于信号处理。

Docker不会在CMD步骤中展开build args。你需要做两件事。首先,将构建参数复制到环境变量中。其次,切换到shell语法以扩展该环境变量

ARG appver=0.0.1
ENV ausername=any
ENV appver=${appver}
COPY ./target/userservice-${appver}-SNAPSHOT.jar .
CMD exec java -jar userservice-${appver}-SNAPSHOT.jar

我添加了一个exec,以便在pid 1扩展命令后立即从中删除shell。这有助于信号处理。

谢谢。你能解释一下为什么它在“复制”声明中不起作用吗?@HeshamOsman为什么你认为它在复制中不起作用?构建在该步骤上没有出错。你检查过图像的内容了吗?我是从日志中猜出来的\n步骤9/10:复制./target/userservice-${appver}-SNAPSHOT.jar。-->3F2772C50130谢谢。你能解释一下为什么它在“复制”声明中不起作用吗?@HeshamOsman为什么你认为它在复制中不起作用?构建在该步骤上没有出错。你检查过图像的内容了吗?我是从日志中猜出来的\n步骤9/10:复制./target/userservice-${appver}-SNAPSHOT.jar。-->3f2772c50130