docker - 如何将 go mod 与本地包和 docker 一起使用?

标签 docker go dependencies dependency-management go-modules

我有两个 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
...
这里replace替换 github.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里面 ~/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/

相关文章:

perl - 在尝试安装 libwww-perl 时构建 Docker 镜像会导致错误,即 perl-modules_5.14.2-6 和 perl_5.14.2-6 Not found

angular - 为什么一个 Angular 容器需要一个暴露的端口来连接?

Pycharm : Couldn't find docker binary 中的 Python docker-compose 解释器

dictionary - 反射(reflect)一片map,每张map都是struct类型?

string - 写入文件时Golang字符损坏

android - '无法解析符号'(设计+ V7 +注释)

java - Maven:通过项目目录外的相对路径向jar添加依赖项

docker - 特权容器和功能

go - 在这种情况下不会出现 panic

android - 如何将依赖项目添加到适本地构建调试或发布 jar 的 android gradle 项目