Go应用程序Dockerfile总是在重新启动时下载模块



我使用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,下载过程将缓存并在每次重新启动时重用(除非您更改依赖项(。

最新更新