在 Docker 中构建 Golang 应用程序在“go get”上返回“无法找到提供包的模块”。

问题描述 投票:0回答:1

我正在使用 Docker 将 Golang 应用程序容器化,但在从 Dockerfile 获取可执行文件时遇到了问题。

这是 Dockerfile:

# syntax=docker/dockerfile:1

FROM golang:1.22.2

WORKDIR /app

# Download Go modules
COPY go.mod go.sum ./
RUN go mod download

COPY *.go ./

RUN CGO_ENABLED=0 GOOS=linux go build -o /sac

EXPOSE 8080

# Run
CMD ["/sac"]

几乎直接从 Docker 文档中关于构建 Go 镜像的内容中摘录。当我去构建这个(

docker build --tag sac-server .
)时,我遇到了一堆错误,它们看起来都是这样的:

main.go:10:2: no required module provides package github.com/GenerateNU/sac/backend/config; to add it:
go get github.com/GenerateNU/sac/backend/config

我在我们的包中为各个模块提供了一堆这些。完整项目的名称(在 (

go.mod
) 中定义为 module
github.com/GenerateNU/sac/backend
,在本例中 /config 是一个子包。我们的目录如下所示:

backend
--->auth
--->config
--->constants
--->database
---><a bunch of other modules>
--->go.mod
--->go.sum
--->main.go
--->Dockerfile

我们遇到的所有关于“不需要的模块”的错误都是引用了 main.go 的子模块/包。

我该如何解决这个问题?我尝试将

go mod download
替换为
go get -d -v .
go mod tidy
,但出现了相同的错误。谢谢你!如果我没有提供有关我们的代码库的足够信息,您可以在此处查看我们的存储库链接:https://github.com/generateNU/sac

docker go
1个回答
0
投票

看来我已经解决了我自己的问题。我在这里找到了另一个有类似问题的答案,并用这个替换了我的 Dockerfile:

# syntax=docker/dockerfile:1

FROM golang:1.22.2

RUN mkdir /app
ADD . /app
WORKDIR /app

COPY go.mod go.sum ./

# Download all the dependencies
RUN go mod download

COPY . .


RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .

至此构建成功。我们还有一个

.dockerignore
忽略了
main.go
中实际使用的两个子包,所以我删除了它以消除这些错误。

© www.soinside.com 2019 - 2024. All rights reserved.