[英]'No required module provides package' when building Go docker image
我的Dockerfile
如下:
# syntax=docker/dockerfile:1
FROM golang:1.18-alpine
WORKDIR /app
COPY go.mod ./
COPY go.sum ./
RUN go mod download
COPY *.go ./
RUN go build -o /datapuller
EXPOSE 8080
CMD [ "/datapuller" ]
我尝试使用$ docker build --tag datapuller.
但出现错误:
main.go:13:2: no required module provides package gitlab.com/mycorp/mycompany/data/datapuller/dbutil; to add it:
go get gitlab.com/mycorp/mycompany/data/datapuller/dbutil
main.go:14:2: no required module provides package gitlab.com/mycorp/mycompany/data/datapuller/models; to add it:
go get gitlab.com/mycorp/mycompany/data/datapuller/models
如何解决这个问题,我可以直接用go run main.go
了。
我的main.go
的导入如下。 我认为进口导致了这个问题:
package main
import (
"encoding/json"
client "github.com/bozd4g/go-http-client"
"github.com/robfig/cron/v3"
"github.com/xuri/excelize/v2"
"gitlab.com/mycorp/mycompany/data/datapuller/dbutil"
"gitlab.com/mycorp/mycompany/data/datapuller/models"
"gorm.io/gorm"
)
func main() {
...
因为构建时需要拉取关联的package。 Docker 可能缺少必要的环境变量来拉取这些包。 建议您使用go mod vendor
命令,然后构建镜像
FROM golang:1.18-alpine
ADD . /go/src/<project name>
WORKDIR /go/src/<project name>
RUN go build -mod=vendor -v -o /go/src/bin/main main.go
RUN rm -rf /go/src/<project name>
WORKDIR /go/src/bin
CMD ["/go/src/bin/main"]
将源代码复制到映像中时,仅复制当前目录中的文件
COPY *.go ./ # just the current directory's *.go, not any subdirectories
在整个主机源代码树中复制通常更常见,可能使用.dockerignore
文件导致某些源代码树被忽略
COPY ./ ./
否则需要将需要的具体子目录复制到镜像中(每个目录需要单独的COPY
命令)
COPY *.go ./
COPY dbutil/ dbutil/
COPY models/ models/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.