我的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
(....)
Run Code Online (Sandbox Code Playgroud)
这是我的go.mod:
module github.com/myuser/myrepo-test
go 1.16
Run Code Online (Sandbox Code Playgroud)
和泊坞窗文件:
# 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"]
Run Code Online (Sandbox Code Playgroud)
atl*_*ine 20
#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 .
Run Code Online (Sandbox Code Playgroud)
上面会将所有源添加到容器中,包括包common等,然后构建就可以了。
| 归档时间: |
|
| 查看次数: |
10659 次 |
| 最近记录: |