docker - Go app Dockerfile 总是在重启时下载模块

标签 docker go docker-compose

我使用 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/

相关文章:

docker - Docker群:保证重启后的高可用性

azure - 使用 Golang 从 Azure Blob 存储下载文件时得到 "curl Empty reply from server",但文件是在后台下载的

django - Docker:服务 'web'无法构建(Django应用程序)

带有Spring引导的Docker中的Mysql连接错误

java - Docker jetty容器JVM内存分配

docker - Ubuntu 20.04 软件包缺少 docker 镜像中的所有 mo 文件

docker - 仅将 docker 端口公开给内部网络

haskell - 使用堆栈和自定义选项构建Docker容器

google-app-engine - 使用go在应用程序引擎中包含电子邮件 header ?

go - 使用包将字符串从一种格式转换为另一种格式