Docker 为简单Golang应用程序生成映像时,go.mod文件丢失

Docker 为简单Golang应用程序生成映像时,go.mod文件丢失,docker,go,Docker,Go,在为golang web服务器创建Docker应用程序之后,我正在Windows上使用Docker Desktop 鉴于代码: package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{

在为golang web服务器创建Docker应用程序之后,我正在Windows上使用Docker Desktop

鉴于代码:

package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
    r.Run(":3000")
}
和Dockerfile:

FROM golang:alpine

# Set necessary environmet variables needed for our image
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# Move to working directory /build
WORKDIR /build

# Copy and download dependency using go mod
COPY go.mod .
COPY go.sum .
RUN go mod download

# Copy the code into the container
COPY . .

# Build the application
RUN go build -o main .

# Move to /dist directory as the place for resulting binary folder
WORKDIR /dist

# Copy binary from build to main folder
RUN cp /build/main .

# Export necessary port
EXPOSE 3000

# Command to run when starting the container
CMD ["/dist/main"]
使用以下命令生成图像时:

docker build . -t go-dock
我得到:


为什么会出现这种情况?

本教程跳过了使用go模块的步骤

一种选择是删除这些行

# Copy and download dependency using go mod
COPY go.mod .
COPY go.sum .
RUN go mod download
并将其替换为

RUN go get -u github.com/gin-gonic/gin
另一个更推荐的选择是坚持使用go模块方法,您需要在其中运行

go mod init
然后将这一行添加到go.mod文件的底部,该文件本应通过上述命令生成

require github.com/gin-gonic/gin v1.5.0
下面是他的go.mod文件的教程示例

要创建go.sum文件,请在创建时创建该文件

go build
如果从dockerfile中删除这一行,我相信您可以跳过创建go.sum

COPY go.sum .

谢谢你花时间回答