我有以下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}
变量为空。
答案 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