【问题标题】:main.go: no required module provides packagemain.go:不需要模块提供包
【发布时间】:2021-08-08 22:29:01
【问题描述】:

我的 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"]

【问题讨论】:

    标签: docker go


    【解决方案1】:

    #14 0.535 main.go:10:2: 不需要模块提供包 github.com/myuser/myrepo-test/common;添加它:
    #14 0.535 去获取 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等,然后构建就可以了。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    相关资源
    最近更新 更多