首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >go build无法在docker上找到本地依赖项。

go build无法在docker上找到本地依赖项。
EN

Stack Overflow用户
提问于 2021-12-02 21:50:02
回答 1查看 1.3K关注 0票数 1

我试图为我的go服务器创建一个dockerfile,但是它一直失败,因为它不识别某些本地依赖项(它们是代码本身的模块,而不是外部依赖项)。

示例:

代码语言:javascript
复制
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()
}

以下是错误:

代码语言:javascript
复制
 => 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

请注意,这个私有回购url对应于该应用程序的存储库(它不是外部依赖项)。

这是Dockerfile

代码语言:javascript
复制
FROM golang:1.17

WORKDIR /balrog

# Copy dependency definitions and download them
ADD go.mod .
ADD go.sum .
RUN go mod download

# Build the binary
ADD ./src .
ENV CGO_ENABLED=0
ENV GOOS=linux
ENV GOARCH=amd64
RUN go build -a -o ./server

#Run the server
CMD ["/server"]

和mod.go文件:

代码语言:javascript
复制
module <private-repo-url>

go 1.16

require (
    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 (这里)启用的。

另外,根据正式的码头映像(在码头枢纽中),正确的方法是在复制所有文件之后使用go、get和go安装。这种方法给我带来了一个稍微不同的问题,即对接者无法访问存储库(因为它是私有的),并且向码头添加凭据是我想避免的事情。

我尝试使用环境变量GOVCS设置它的值,例如:

ENV GOVCS=github.com:git,gitlab.com:off

但同样的错误,它还是失败了。

最后,我尝试了替换,我想如果我从本地依赖项中删除它就能工作,所以我执行了以下操作(在Dockerfile中):

RUN go mod edit -replace <private-repo-url>=./

它也同样失败了,因为:

代码语言:javascript
复制
 => ERROR [builder 10/10] RUN go build -a -o ./server                                                                                                                                                              0.3s
------                                                                                                                                                                                                                  
 > [builder 10/10] RUN go build -a -o ./server:                                                                                                                                                                         
#17 0.299 server.go:4:2: module <private-repo-url>/src provides package <private-repo-url>/src/cmd/http-api/bootstrap and is replaced but not required; to add it:
#17 0.299       go get <private-repo-url>/src
#17 0.299 server.go:5:2: no required module provides package go.uber.org/fx; to add it:
#17 0.299       go get go.uber.org/fx

有没有办法阻止go生成器/包安装程序在外部查找这些文件?由于go mod和go get + go安装,尝试访问这个私有存储库并失败,因为它们没有访问权限。但是他们不应该一开始就尝试访问它,因为它是应用程序的存储库.还是我做错了什么(很明显,否则我不会在这里),错过了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-02 22:41:10

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

应该是COPY . ./

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70206905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档