在 Docker 17.05 中,我所知道的唯一选项已发布:重构以使用运行命令和卷挂载运行该步骤,或者正如您所做的那样,docker cp
. 每个选项都需要使用该选项构建特定的构建目标--target
,我怀疑这是您最初的问题。
使用 19.03 中的 BuildKit,可以选择构建图像以外的东西。那看起来像:
# import code
FROM golang:1.13 AS code
COPY . /build
WORKDIR /build
# execute tests
FROM code as test
RUN go test ./... -coverprofile=cover.out
# execute build
FROM code as build
RUN go build -o executable
# add a stage for artifacts you wish to extract from the build
FROM scratch as artifacts
COPY --from test /build/coverage.xml /
COPY --from test /build/report.xml /
# and finally the release stage
FROM gcr.io/distroless/base:latest as release
COPY --from=build /build/executable /executable
ENTRYPOINT ["/executable"]
然后您的构建命令如下所示:
mkdir -p artifacts
DOCKER_BUILDKIT=1 docker build -o type=local,dest=artifacts/. --target artifacts .
DOCKER_BUILDKIT=1 docker build -t myapp .
重要的细节是--output
or-o
选项,它指定 BuildKit 应该对生成的图像做什么。默认情况下,它会被导入回本地 docker 引擎。但在这种情况下,它将结果写入本地文件系统。