我的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] 删除。
我来说两句