存储在GitHub中的Go模块成功地在本地编译;但是,如果我试图通过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
以及码头文件:
# 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"]
发布于 2021-08-08 13:29:53
#14 0.535 main.go:10:2:不需要模块提供github.com/myuser/myrepo测试/通用包;添加它:
#14 0.535 get github.com/myuser/myrepo-test/common
上面的意思是您的源代码中有一个包common
。但是COPY *.go ./
不会将这些文件夹添加到停靠构建容器中,它只会将当前目录中的go files
复制到停靠构建中。由于go build
无法在容器中的源代码中找到包common
,它将尝试从github
下载它,因此构建失败。
然后,正确的解决方案如下:
文档:
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
等,然后构建就可以了。
https://stackoverflow.com/questions/68701039
复制相似问题