main.go:不需要的模块提供包

彼得森·戴维斯

我的Go模块,存放在GitHub中,本地编译成功;但是,如果我尝试通过 docker 执行此操作,即使在本地在同一文件夹中,对于子文件夹中的每个本地导入,我都会收到错误消息,抱怨我的本地包不存在:

=> ERROR [build 7/7] RUN go build -o myrepo-test .                                                                                                                                                                                                                          0.6s 
------
 > [build 7/7] RUN go build -o myrepo-test .:
#14 0.535 main.go:10:2: no required module provides package github.com/myuser/myrepo-test/common; to add it:
#14 0.535       go get github.com/myuser/myrepo-test/common
#14 0.535 main.go:13:2: no required module provides package github.com/myuser/myrepo-test/scraper/data/process; to add it:
#14 0.535       go get github.com/myuser/myrepo-test/scraper/data/process
(....)

这是我的go.mod

module github.com/myuser/myrepo-test

go 1.16

和 docker 文件:

# use alpine due to its small footprint
FROM golang:1.16-buster AS build

WORKDIR /app

# download the required Go dependencies
COPY go.mod ./
COPY go.sum ./
RUN go mod download

COPY *.go ./

# FAIL
RUN go build -o myrepo-test .

##########
# Deploy #
##########

FROM gcr.io/distroless/base-debian10

WORKDIR /

COPY --from=build /myrepo-test /myrepo-test

USER nonroot:nonroot

ENTRYPOINT ["/myrepo-test"]

CMD ["/myrepo-test"]
在线

#14 0.535 main.go:10:2: 不需要模块提供包 github.com/myuser/myrepo-test/common;添加它:
#14 0.535 go get github.com/myuser/myrepo-test/common

以上意味着您common的源中有一个包但是COPY *.go ./不会将这些文件夹添加到 docker build 容器中,它只会将go files当前目录复制到 docker build 中。由于在容器的源中go build找不到包common,它将尝试从 下载它github,因此构建失败。

然后,正确的解决方案如下:

Dockerfile:

FROM golang:1.16-buster AS build

WORKDIR /app

# download the required Go dependencies
COPY go.mod ./
COPY go.sum ./
RUN go mod download
#COPY *.go ./
COPY . ./

RUN ls

RUN go build -o myrepo-test .

以上会将您的所有源添加到容器中,包括包common等,然后构建就可以了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么小程序不需要main()?

未优化的clang ++代码在琐碎的main()中生成不需要的“ movl $ 0,-4(%rbp)”

为什么包含main方法的类不需要在Java中公开?

为什么Final变量不需要在Java的main方法中初始化?

在JavaFX中使用“ start”方法时是否不需要main?

为什么单例对象创建的scala程序不需要静态的main方法?

为什么有些类需要main方法,而另一些则不需要呢?

不需要全局npm模块

Pyinstaller自动包含不需要的模块

Ansible 任务安装不需要的包

如何创建不需要专门导入单个模块的python包?

为什么IDLE不需要'if __name__ ==“ __main__”:来运行一个测试用例,而PyCharm却需要呢?

从Go中的main导入本地包

为什么当涉及的线程之一是 main() 线程时,线程间可见性不需要 volatile 关键字?

每个requireJs模块中的jQuery都不需要

调用模块而不需要本地tf文件?

不需要WebWorker(NWJS)中的节点模块

是否可以不需要Java中的模块?

如何删除不需要的博览会模块

为什么不需要提供托管环境?

data.table的fread()提供不需要的下载消息

角度测试:TestBed不需要提供ApplicationRef

找不到'__main__'模块

Go项目中需要main.go吗?

如何构建不需要root的软件包

PasswordGenerator 包正在生成不需要的特殊字符

servlet 不需要指定 8080 和包名

Rust 闭包真的不需要类型注释吗?

处理简单方案包时不需要的引号