我试图通过复制整个目录来加快运行速度(包括,因为在我居住的第三世界国家/地区,重新下载依赖项需要大约1000万美元),但是当我试图运行它时,它总是一次又一次地重新下载供应商,这与本地不同:Dockerfilevendorgo mod vendor
FROM golang:1.14-alpine AS builder
RUN apk --update add ca-certificates git make g++
ENV GO111MODULE=on
WORKDIR /app
RUN go get github.com/go-delve/delve/cmd/dlv
COPY . .
RUN go mod vendor
ARG COMMIT_HASH
ENV COMMIT_HASH=${COMMIT_HASH}
ARG BUILD_DATE
ENV BUILD_DATE=${BUILD_DATE}
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build \
-o app
FROM golang:1.14-alpine
WORKDIR /app
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY --from=builder /go/bin/dlv /
COPY --from=builder /app/app .
COPY --from=builder /app/db ./db
EXPOSE 8080 63342
CMD [ "/dlv", "--listen=:63342", "--headless=true", "--api-version=2", "--accept-multiclient", "exec", "./app" ]
以前使用这个(没有供应商)也很慢:
COPY go.mod .
COPY go.sum .
RUN go mod download -x
COPY . .
尝试这样做也不起作用:
COPY vendor /go/pkg/mod
COPY vendor /go/pkg/mod/cache/download
COPY go.mod .
COPY go.sum .
RUN go mod download -x
COPY . .
如何强制它使用复制的供应商目录,而不是一次又一次地重新下载?
因此,预期的行为是:
当本地有(使用),应该使用它vendor
go mod vendor
docker build
但是当在CI上(因为没有承诺回购)或没有它的开发人员应该重新下载所有内容(我真的不在乎,因为他们有很好的带宽)vendor/*/*
vendor/*/*
该命令适用于尚未使用的 CI 和开发人员go mod vendor
go mod vendor
心有法竹
相关分类