我想构建一个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的方式是不正确的。有人可以指导我吗?
致谢
答案 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