使用 golang docker 镜像时无法覆盖 go module protoc 版本

问题描述

名为 golang:1.15 的 docker 镜像包含我使用 protoc 生成 grpc 代码所需的一切。唯一的问题是我希望输出稳定,通过固定几个包的版本(protoc-gen-goprotoc-gen-go-grpcgrpcprotobuf)。

这是我的 Dockerfile

FROM golang:1.15

workdir /app

RUN export GO111MODULE=on  # Enable module mode
RUN go mod init id

RUN go get google.golang.org/protobuf/cmd/protoc-gen-go@v1.25.0
RUN go get google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0
RUN go get google.golang.org/grpc@v1.35.0
RUN go get github.com/golang/protobuf@v1.4.3

RUN export PATH="$PATH:$(go env GOPATH)/bin"

代码生成是这样完成的:

docker run -v "$$(pwd):/app" -v "$$(pwd)/pb:/pb" apigen protoc --go_out=../pb --go_opt=paths=source_relative --go-grpc_out=../pb --go-grpc_opt=paths=source_relative ./myproto.proto

这可以生成代码,但是在顶部 // protoc-gen-go v1.25.0-devel 这不是我问的版本。

我尝试更改 RUN go get .../protoc-gen-go@v1.25.0 以获得 v1.24.0,但它仍然在文件显示相同的输出,这意味着它根本不使用我的模块,并且必须使用来自golang 图像。

如何覆盖图像中的内容以固定版本?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...