如何在本地软件包和docker中使用go mod?

问题描述 投票:0回答:1

我有两个go模块github.com/myuser/mymainrepogithub.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
...

此处replacegithub.com/myuser/commonrepo替换../commonrepo,但在Docker中/go/src/commonrepo不存在。

我正在CI / CD上构建Docker映像,它需要直接从远程github url获取,但是我还需要在commonrepo上进行本地开发。我该怎么办?

我试图将所有文件都放在GOPATH中,所以它是~/go/src/github.com/myuser/commonrepogo/src/github.com/myuser/mymainrepo。我删除了replace指令。但是它会在commonrepo中寻找从github下载的~/go/pkg/mod/...

我有两个go模块github.com/myuser/mymainrepo和github.com/myuser/commonrepo这是我在本地计算机中的文件的方式-allmyrepos-mymainrepo-Dockerfile-go.mod-...

docker go dependencies dependency-management go-modules
1个回答
1
投票

创建两个go.mod文件:一个用于本地开发,一个用于构建。您可以将其命名为go.build.mod

replace指令保留在go.mod文件中,但将其从go.build.mod中删除。

© www.soinside.com 2019 - 2024. All rights reserved.