Build args不会将值传递给Docker文件

时间:2019-03-29 03:14:02

标签: java linux docker build alpine

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

docker build --build-arg project_file_name=account.jar -t account:1.0 .

码头工人文件看起来像这样(#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}

如果对变量进行硬编码,它将看起来像这样(#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

使用#1和#2构建图像后

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

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

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

致谢

1 个答案:

答案 0 :(得分:1)

正在运行的容器将无法访问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}

您可以阅读更多here