构建参数不会将值传递给 docker 文件

Jim*_*Lee 4 java linux build docker alpine-linux

我想构建一个docker镜像。我跑

docker build --build-arg project_file_name=account.jar -t account:1.0 .
Run Code Online (Sandbox Code Playgroud)

docker 文件如下所示(#1)

FROM anapsix/alpine-java:8u172b11_server-jre

ARG project_file_name

MAINTAINER jim
COPY src/${project_file_name} /home/${project_file_name}
CMD java -jar /home/${project_file_name}
Run Code Online (Sandbox Code Playgroud)

如果对变量进行硬编码,它将如下所示(#2)

FROM anapsix/alpine-java:8u172b11_server-jre

MAINTAINER jim
enter code here
COPY src/account.jar /home/account.jar
CMD java -jar /home/account.jar
Run Code Online (Sandbox Code Playgroud)

在我用 #1 和 #2 构建图像之后

使用 #1,当我运行 docker 时,docker 告诉我它找不到指定的 jar 文件

使用#2,当我运行 docker 时,docker 能够正确执行 java jar 文件。

对我来说#1 和#2 都是一样的。只是 #1 使用 build-arg 变量方式,#2 是硬编码值。我相信我使用 build-args 的方式是不正确的。任何人都可以指导我吗?

问候

Suk*_*ngh 5

正在运行的容器将无法访问ARG变量值。ENV为此,您需要变量。虽然您可以使用ARG变量来设置ENV变量。在你的情况下你可以做

FROM anapsix/alpine-java:8u172b11_server-jre
ARG project_file_name
ENV PROJECT_FILE=${project_file_name}

MAINTAINER jim
COPY src/${project_file_name} /home/${project_file_name}
CMD java -jar /home/${PROJECT_FILE}
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多