簡體   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