Go语言 使用Docker RUN --mount=type=cache

ecr0jaav  于 2024-01-04  发布在  Go
关注(0)|答案(1)|浏览(163)

我不完全理解dockerRUN --mount=type=cache机制,即使阅读了以下文章,

这是一个简单的dockerfile:

  1. FROM debian
  2. ENV GOPATH=/go
  3. WORKDIR ${GOPATH}/src/github.com/my/prj
  4. # Copy sources
  5. COPY ./ ./
  6. RUN ls -l
  7. RUN --mount=type=cache,target=${GOPATH} ls -l

字符串
我试图做的是缓存go mod download和所有去构建缓存,然而,这是我得到的:

  1. #5 [internal] load build context
  2. #5 transferring context: 2.04kB done
  3. #5 DONE 0.0s
  4. #6 [builder 2/5] WORKDIR /go/src/github.com/my/prj
  5. #6 CACHED
  6. #7 [builder 3/5] COPY ./ ./
  7. #7 DONE 0.0s
  8. #8 [builder 4/5] RUN ls -l
  9. #8 1.555 total 312
  10. #8 1.555 -rw-r--r-- 1 root root 23796 Dec 2 21:59 History.md
  11. #8 1.555 -rw-r--r-- 1 root root 1097 Dec 2 21:59 LICENSE
  12. #8 1.555 -rw-r--r-- 1 root root 600 Dec 2 21:59 Makefile
  13. #8 1.555 -rw-r--r-- 1 root root 15 Dec 2 21:59 Procfile
  14. #8 1.555 -rw-r--r-- 1 root root 57837 Dec 2 21:59 README.md
  15. #8 1.555 -rwxr-xr-x 1 root root 714 Dec 2 21:59 benchmark.sh
  16. #8 1.555 -rw-r--r-- 1 root root 6093 Dec 2 21:59 controllers.go
  17. #8 1.555 -rw-r--r-- 1 root root 3823 Dec 2 21:59 error.go
  18. #8 1.555 -rw-r--r-- 1 root root 459 Dec 2 21:59 error_test.go
  19. #8 1.555 -rw-r--r-- 1 root root 276 Dec 2 21:59 go.mod
  20. #8 1.555 -rw-r--r-- 1 root root 6439 Dec 2 21:59 go.sum
  21. . . .
  22. #8 1.555 -rw-r--r-- 1 root root 318 Dec 2 21:59 version.go
  23. #8 DONE 1.6s
  24. #9 [builder 5/5] RUN --mount=type=cache,target=/go ls -l
  25. #9 1.881 total 4
  26. #9 1.881 -rw-r--r-- 1 root root 45 Dec 2 22:58 go.mod
  27. #9 DONE 1.9s


为什么使用--mount=type=cache时我的文件突然消失了?如何清除这样的--mount=type=cache,同时保留所有其他Docker缓存,如步骤缓存或apt缓存?使用COPY . .时,是否仍然可以缓存go mod download和所有go build缓存?

zxlwwiss

zxlwwiss1#

Dockerfile中似乎缺少# syntax = docker/dockerfile:1.2。只需确保它被声明为Dockerfile中的第一行。此注解告诉Docker您正在使用BuildKit功能。

相关问题