无法在 dockerfile 中构建 Golang

Whi*_*lez 2 go docker docker-compose

我的项目结构如下: https ://i.stack.imgur.com/SqqDh.png

这是我的 Dockerfile:

FROM golang:1.19

ADD . /go/src/myapp

WORKDIR /go/src/myapp

RUN go mod init cloudmeta

RUN go get github.com/go-sql-driver/mysql
RUN go get -u github.com/gin-gonic/gin

RUN go build -o bin/cloudmeta

CMD [ "bin/cloudmeta" ]
Run Code Online (Sandbox Code Playgroud)

当我尝试构建我的 docker-container 时,出现以下错误:

package cloudmeta/backend/handlers is not in GOROOT (/usr/local/go/src/cloudmeta/backend/handlers)
Run Code Online (Sandbox Code Playgroud)

小智 5

在 docker 中构建 Go 代码时,不应使用go mod init. 看一下docker 文档中的以下 dockerfile示例:

# syntax=docker/dockerfile:1

FROM golang:1.16-alpine

WORKDIR /app

COPY go.mod ./
COPY go.sum ./
RUN go mod download

COPY *.go ./

RUN go build -o /docker-gs-ping

EXPOSE 8080

CMD [ "/docker-gs-ping" ]
Run Code Online (Sandbox Code Playgroud)

docker 文档指南更深入,但总结一下:

  1. 您应该将您的go.modgo.sum文件复制到图像中的项目目录中。
  2. 现在您可以运行go mod download命令来安装所需的 go 模块。
  3. 然后您需要将源代码复制到图像中。
  4. 现在您可以使用该go build命令编译源代码。