go build
依存関係が変更されていない限り、Docker でコマンドを取得して、すべてのビルドでモジュール キャッシュまたはベンダー ディレクトリを使用するにはどうすればよいですか?
これらのアプローチの両方を試しましたが、一貫性のない結果が得られました。
Docker コンテナーで go 1.11 モジュールを永続化するにはどうすればよいですか? ^ これは機能しません。Docker の「ビルダー」パターンを使用しているためだと思います。
https://medium.com/@monirz/golang-dependency-solution-with-go-module-and-docker-8967da6dd9f6 ^これは機能するはずですが、何らかの理由で機能しません...
私はサーバーで作業しており、ソースコードに小さな変更を加えるたびに、再コンパイルする必要があるのは理にかなっていますが、そのステップですべての依存関係を再度ダウンロードする必要があるのは理にかなっていません。毎回。
このサーバーを として構築しています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"]
また、 go コマンドにフラグを追加しようとしました-mod=vendor
が、動作は変わりません... 1.14 がモジュールパス (そこにある) でベンダーディレクトリを検出した場合、とにかくそのフラグを自動的に使用する必要があります。