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