除非依赖项已更改,否则如何go build
在 Docker 中获取命令以在每次构建时使用模块缓存或供应商目录?
我已经尝试了这两种方法,但结果不一致:
如何在 Docker 容器中保留 go 1.11 模块? ^ 这不起作用,我相信因为我使用的是 Docker “builder” 模式。
https://medium.com/@monirz/golang-dependency-solution-with-go-module-and-docker-8967da6dd9f6 ^ 这应该可以,但由于某种原因不能...
我正在一台服务器上工作,对于我对 go 源代码所做的每一个小改动,我都需要重新编译是有道理的,但是那一步也必须再次重新下载所有依赖项是没有意义的,每次。
我正在将此服务器构建为go module
,这是我当前的 Dockerfile:
FROM golang:1.14 AS builder
# Add the source
WORKDIR /app
COPY . .
# Statically compile our app for use in a distroless container
RUN CGO_ENABLED=0 go build -mod vendor -ldflags="-w -s" -v -o app .
# A distroless container image with some basics like SSL certificates
# https://github.com/GoogleContainerTools/distroless
FROM gcr.io/distroless/static
# Copy over binary and words dir
COPY --from=builder /app/app /app
ENTRYPOINT ["/app"]
我还尝试将-mod=vendor
标志添加到 go 命令中并且它不会改变行为......如果 1.14 在模块路径中检测到供应商目录(在那里),它应该已经自动使用该标志。