在构建期间未替换Dockerfile占位符

时间:2017-11-30 09:27:45

标签: docker dockerfile

使用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%

enter image description here

3 个答案:

答案 0 :(得分:-1)

Dockerfile 中的

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)

ARGENVnot replaced by Docker in an ENTRYPOINT or a CMD

ARGENV变量将作为环境变量在容器中的RUN命令中提供。

Docker还会在以下说明中替换$VARIABLES中的Dockerfile

  • ADD
  • COPY
  • ENV
  • EXPOSE
  • FROM
  • LABEL
  • STOPSIGNAL
  • USER
  • VOLUME
  • WORKDIR

ENVCMD中只有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"]