我有两个 go 模块 github.com/myuser/mymainrepo
和 github.com/myuser/commonrepo
这是我在本地计算机中保存文件的方式
- allmyrepos
- mymainrepo
- Dockerfile
- go.mod
- commonrepo
- go.mod
mymainrepo/go.mod...
require (
github.com/myuser/commonrepo
)
replace (
github.com/myuser/commonrepo => ../commonrepo
)
它运作良好,我可以用它进行本地开发。当我构建 mymainrepo 的 docker 镜像时会出现问题mymainrepo/Dockerfile
...
WORKDIR /go/src/mymainrepo
COPY go.mod go.sum ./
RUN go mod download
COPY ./ ./
RUN go build -o appbinary
...
这里replace
替换 github.com/myuser/commonrepo
与 ../commonrepo
但在 Docker /go/src/commonrepo
不存在。我正在 CI/CD 上构建 Docker 镜像,需要直接从远程 github url 获取,但我还需要在
commonrepo
上进行本地开发.我该怎么做?我试图把我所有的文件放在
GOPATH
所以它是~/go/src/github.com/myuser/commonrepo
和 go/src/github.com/myuser/mymainrepo
.我删除了replace
指示。但它寻找 commonrepo
里面 ~/go/pkg/mod/...
这是从github下载的。
最佳答案
创建两个 go.mod
文件:一个用于本地开发,一个用于您的构建。你可以命名go.build.mod
例如。
保留replace
您的 go.mod
中的指令文件,但将其从 go.build.mod
中删除.
最后,在您的 Dockerfile
:
COPY go.build.mod ./go.mod
COPY go.sum ./
关于docker - 如何将 go mod 与本地包和 docker 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61657763/