Go app Dockerfile总是在重新启动时下载模块

Go app Dockerfile总是在重新启动时下载模块,docker,go,docker-compose,Docker,Go,Docker Compose,我使用Go语言编写了一个应用程序,并为其创建了Dockerfile,如下所示。问题是每次我重新启动docker容器时,所有模块都会再次下载 FROM golang:1.15-alpine WORKDIR /my-app COPY . . RUN go run main.go 如何修复此问题?Docker将缓存每个层,并在它们与上一次运行相同时使用它们。您的Dockerfile的问题在于,您没有添加用于下载模块的层,也没有构建应用程序(您每次都在运行它)。我假设您正在为依赖项使用go模块,因此这

我使用
Go
语言编写了一个应用程序,并为其创建了
Dockerfile
,如下所示。问题是每次我重新启动docker容器时,所有模块都会再次下载

FROM golang:1.15-alpine
WORKDIR /my-app
COPY . .
RUN go run main.go

如何修复此问题?

Docker将缓存每个层,并在它们与上一次运行相同时使用它们。您的
Dockerfile
的问题在于,您没有添加用于下载模块的层,也没有构建应用程序(您每次都在运行它)。我假设您正在为依赖项使用
go
模块,因此这里是
Dockerfile

FROM golang:1.15-alpine
WORKDIR /my-app
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .
RUN go build -i -o ./build/my-app
ENTRYPOINT ["./build/my-app"]
使用此
Dockerfile
下载过程将缓存并在每次重新启动时重新使用(除非更改依赖项)