我使用 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
下载过程将在每次重新启动时缓存并重用(除非您更改依赖项)。
关于docker - Go app Dockerfile 总是在重启时下载模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64400588/