繁体   English   中英

构建 Go docker 图像时“不需要模块提供包”

[英]'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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM