使用Docker for Windows,社区版17.06.0-ce-win19(12801),Windows 10
Dockerfile
FROM frolvlad/alpine-oraclejdk8:slim
ARG APP_NAME=client-default
RUN mkdir -p /client/
ADD build/libs/$APP_NAME.jar /client/$APP_NAME.jar
ENTRYPOINT ["java", "-jar", "/client/$APP_NAME.jar"]
运行
docker build --build-arg APP_NAME=client-1 -t test/client-1 .
构建后未替换占位符(已尝试 $ {APP_NAME} ,%APP_NAME%)
答案 0 :(得分:-1)
ARG 在容器/图片中设置环境变量,而不是与 RUN
一起使用ADD 是用于构建映像的 docker 指令,无法读取容器的环境变量。据我所知,你不能这样做。
答案 1 :(得分:-1)
使用ENV
语句声明Dockerfile中的环境变量。
在您的情况下:
FROM frolvlad/alpine-oraclejdk8:slim
ENV APP_NAME client-default
RUN mkdir -p /client/
ADD build/libs/${APP_NAME}.jar /client/${APP_NAME}.jar
ENTRYPOINT ["java", "-jar", "/client/${APP_NAME}.jar"]
答案 2 :(得分:-2)
ARG
和ENV
为not replaced by Docker in an ENTRYPOINT
or a CMD
。
ARG
和ENV
变量将作为环境变量在容器中的RUN
命令中提供。
Docker还会在以下说明中替换$VARIABLES
中的Dockerfile
:
ENV
或CMD
中只有ENTRYPOINT
变量才可用,仅在正在运行的容器的环境中可用:
使用ARG
FROM frolvlad/alpine-oraclejdk8:slim
ARG APP_NAME=client-default
ENV APP_NAME=$APP_NAME
RUN mkdir -p /client/
ADD build/libs/$APP_NAME.jar /client/$APP_NAME.jar
ENTRYPOINT ["sh", "-c", "java -jar /client/$APP_NAME.jar"]
或仅使用ENV
FROM frolvlad/alpine-oraclejdk8:slim
ENV APP_NAME=client-default
RUN mkdir -p /client/
ADD build/libs/$APP_NAME.jar /client/$APP_NAME.jar
ENTRYPOINT ["sh", "-c", "java -jar /client/$APP_NAME.jar"]