我正在使用 docker、Postgres 和 gorm 制作一个应用程序(使用 ORM 库) 当我想构建我的 docker 映像时,出现此错误(某种 EOF?)
我的代码非常简单,无需 docker 也能正确运行。
package main
import (
"fmt"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
func main() {
dsn := "host=localhost user=postgres password=postgres dbname=postgres port=5432 sslmode=disable TimeZone=Asia/Shanghai"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println("Error connecting to postgres", err)
}
fmt.Printf("%+v\n", db)
}
另外,这是我的 Dockerfile:
FROM golang:1.16.4-alpine3.13 AS build
RUN mkdir /app
COPY src/go.mod /app
COPY src/go.sum /app
WORKDIR /app
RUN go mod download
COPY src /app
RUN go build -o main .
FROM alpine AS final
COPY --from=build /app /app
ENTRYPOINT ["/app/main"]
这看起来像是网络问题。
当您在 Docker 外部运行时,您可能不会看到这些错误,因为受影响的模块已经存在于先前构建的本地模块缓存中,而您的 Dockerfile 是从干净的缓存启动并重新下载模块源的每次。
就我而言,这是因为网络问题,使用 VPN 或代理可能会有所帮助,我将此变量(
GOPROXY
)设置为我的命令并且它起作用了:
GOPROXY="https://goproxy.io" go mod download # or `go mod tidy`