使用通配符在多阶段构建中复制配置文件时遇到问题

时间:2018-11-27 08:33:43

标签: docker docker-compose

我有以下Dockerfile:

FROM golang:alpine AS build
ARG stage
RUN apk update && apk upgrade && \
  apk add --no-cache bash git openssh build-base
ADD . /src
WORKDIR /src
RUN go get -u golang.org/x/vgo
RUN vgo mod init && vgo mod vendor && vgo build -o service

FROM alpine
RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/*
WORKDIR /app
COPY --from=build /src/${stage}-env.yml /app/
COPY --from=build /src/service /app/
RUN ls -la
ENTRYPOINT ./service

我在docker-compose文件中传递了stage参数,例如:

build:
      context: ./run-query
      args:
        stage: latest

但是我没有得到正确的输出,${stage}变量为空。

1 个答案:

答案 0 :(得分:1)

参考https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact

  

FROM指令支持任何ARG声明的变量   出现在第一个FROM之前的指令。

     

在FROM之前声明的ARG不在构建阶段,因此它不能   在FROM之后的任何指令中使用。使用默认值   在第一个FROM之前声明的ARG使用不带ARG指令的ARG指令   构建阶段的价值

您需要在第二阶段再次声明ARG stage

FROM alpine
ARG stage