为了账号安全,请及时绑定邮箱和手机立即绑定

go build 找不到 docker 上的本地依赖

go build 找不到 docker 上的本地依赖

Go
拉丁的传说 2022-10-17 16:06:37
我正在尝试为我的 go 服务器创建一个 dockerfile,但它一直失败,因为它无法识别一些本地依赖项(它们是代码本身的模块,而不是外部依赖项)。例子:import (    "<private-repo-url>/src/cmd/http-api/bootstrap" // this a local module that's part of the server    "go.uber.org/fx")func main() {    fx.New(bootstrap.Module).Run()}这是错误: => ERROR [7/7] RUN go build -a -o ./server                                                                                                                                                                        0.3s------ > [7/7] RUN go build -a -o ./server:#10 0.295 server.go:4:2: no required module provides package <private-repo-url>/src/cmd/http-api/bootstrap; to add it:#10 0.295       go get <private-repo-url>/src/cmd/http-api/bootstrap------executor failed running [/bin/sh -c go build -a -o ./server]: exit code: 1请注意,此private-repo-url对应于此应用程序的存储库(它不是外部依赖项)。这是 DockerfileFROM golang:1.17WORKDIR /balrog# Copy dependency definitions and download themADD go.mod .ADD go.sum .RUN go mod download# Build the binaryADD ./src .ENV CGO_ENABLED=0ENV GOOS=linuxENV GOARCH=amd64RUN go build -a -o ./server#Run the serverCMD ["/server"]还有 mod.go 文件:module <private-repo-url>go 1.16require (    github.com/gin-gonic/gin v1.7.7    github.com/google/uuid v1.3.0    github.com/kelseyhightower/envconfig v1.4.0    github.com/sirupsen/logrus v1.8.1    go.uber.org/fx v1.15.0)我读过GO111MODULE说它应该打开,并且我还读到它从 1.17 开始默认启用(这里)。同样根据官方 docker 映像(在dockerhub中),正确的方法是在复制所有文件后使用go get和go install 。这种方法使我遇到了一个稍微不同的问题,即 docker 无法访问存储库(因为它是私有的)并且我想避免向 docker 添加凭据。我尝试使用环境变量GOVCS设置它的值,例如:ENV GOVCS=github.com:git,gitlab.com:off但它仍然失败并出现同样的错误。最后我尝试了替换,我认为如果我从本地依赖项中删除它会起作用,所以我执行了(在 Dockerfile 中)这个:RUN go mod edit -replace <private-repo-url>=./有什么方法可以防止 go builder/package installer 在外部查找这些文件?由于go mod和go get + go install 都尝试访问此私有存储库,但由于它们无权访问而失败。但是他们不应该首先尝试访问它,因为它是应用程序的存储库......或者我做错了什么(显然或者我不会在这里),错过了什么?
查看完整描述

1 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

ADD ./src .- 将内容复制src到当前文件夹,剥离src部分。

它应该只是COPY . ./

另请注意,不建议src在源代码树中包含子文件夹 - 包含的文件夹go.mod已经是源代码树。


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信