Docker BuildKit --mount = type = cache无法正常工作,为什么? [英] Docker BuildKit --mount=type=cache not working, why?

查看:449
本文介绍了Docker BuildKit --mount = type = cache无法正常工作,为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试实现我的Dockerfile是:

My Dockerfile is:

# syntax = docker/dockerfile:experimental
FROM python:3.6-alpine
RUN --mount=type=cache,target=/root/.cache/pip pip install pyyaml

CMD:docker build --progress=plain -t abc:1 . --no-cache

首次运行输出:

#2 [internal] load .dockerignore
#2 transferring context: 2B done
#2 DONE 0.0s

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 175B done
#1 DONE 0.0s

#3 resolve image config for docker.io/docker/dockerfile:experimental
#3 DONE 2.8s

#4 docker-image://docker.io/docker/dockerfile:experimental@sha256:787107d7f...
#4 CACHED

#5 [internal] load metadata for docker.io/library/python:3.6-alpine
#5 DONE 0.0s

#6 [stage-0 1/2] FROM docker.io/library/python:3.6-alpine
#6 CACHED

#7 [stage-0 2/2] RUN --mount=type=cache,target=/root/.cache/pip pip install...
#7 1.410 Collecting pyyaml
#7 1.731   Downloading PyYAML-5.3.1.tar.gz (269 kB)
#7 2.470 Building wheels for collected packages: pyyaml
#7 2.471   Building wheel for pyyaml (setup.py): started
#7 2.801   Building wheel for pyyaml (setup.py): finished with status 'done'
#7 2.802   Created wheel for pyyaml: filename=PyYAML-5.3.1-cp36-cp36m-linux_x86_64.whl size=44621 sha256=0bfa8470e677b8c2e1d50f8749aa5890b5fb7d7d15352596fbd928c846f9922d
#7 2.802   Stored in directory: /root/.cache/pip/wheels/e5/9d/ad/2ee53cf262cba1ffd8afe1487eef788ea3f260b7e6232a80fc
#7 2.803 Successfully built pyyaml
#7 2.835 Installing collected packages: pyyaml
#7 2.882 Successfully installed pyyaml-5.3.1
#7 DONE 3.3s

#8 exporting to image
#8 exporting layers
#8 exporting layers 0.1s done
#8 writing image sha256:d7ecd86c64611e14f55fa2d31b8f440246e356026eef7175526ccc921373c205 done
#8 naming to docker.io/library/abc:1 done
#8 DONE 0.1s

第二次运行输出:

#1 [internal] load .dockerignore
#1 transferring context: 2B done
#1 DONE 0.0s

#2 [internal] load build definition from Dockerfile
#2 transferring dockerfile: 37B done
#2 DONE 0.0s

#3 resolve image config for docker.io/docker/dockerfile:experimental
#3 DONE 2.7s

#4 docker-image://docker.io/docker/dockerfile:experimental@sha256:787107d7f...
#4 CACHED

#5 [internal] load metadata for docker.io/library/python:3.6-alpine
#5 DONE 0.0s

#6 [stage-0 1/2] FROM docker.io/library/python:3.6-alpine
#6 CACHED

#7 [stage-0 2/2] RUN --mount=type=cache,target=/root/.cache/pip pip install...
#7 1.385 Collecting pyyaml
#7 1.773   Downloading PyYAML-5.3.1.tar.gz (269 kB)
#7 2.517 Building wheels for collected packages: pyyaml
#7 2.518   Building wheel for pyyaml (setup.py): started
#7 2.844   Building wheel for pyyaml (setup.py): finished with status 'done'
#7 2.846   Created wheel for pyyaml: filename=PyYAML-5.3.1-cp36-cp36m-linux_x86_64.whl size=44621 sha256=064a160d2f195ad7753fba5abf9481b40b515fadffc94f30aef20146209a0faa
#7 2.846   Stored in directory: /root/.cache/pip/wheels/e5/9d/ad/2ee53cf262cba1ffd8afe1487eef788ea3f260b7e6232a80fc
#7 2.846 Successfully built pyyaml
#7 2.877 Installing collected packages: pyyaml
#7 2.920 Successfully installed pyyaml-5.3.1
#7 DONE 3.3s

#8 exporting to image
#8 exporting layers
#8 exporting layers 0.1s done
#8 writing image sha256:42525b426b00a8728b735c15efb96bd237fc020f46d6d99f5bfebb7758016e71 done
#8 naming to docker.io/library/abc:1 done
#8 DONE 0.1s

预期:

在第二次运行中,我期望从缓存中选择pyyaml.

In the second run, I was expecting pyyaml to be picked from the cache.

操作系统: Mac OS Catalina(10.15.3)

OS: Mac OS Catalina (10.15.3)

Docker版本:

引用: https://stackoverflow.com/a/58021389/1060337

推荐答案

例如,您可以将mode=0777添加到Dockerfile以使其正常工作.

You could add mode=0777 for example to Dockerfile to make it work.

Dockerfile:

# syntax = docker/dockerfile:experimental
FROM python:3.6-alpine
RUN --mount=type=cache,mode=0777,target=/root/.cache/pip pip install pyyaml

在这里

mode:八进制的新缓存目录的文件模式.默认值0755.

mode: File mode for new cache directory in octal. Default 0755.

第一次运行:

#8 [stage-0 2/2] RUN --mount=type=cache,mode=0777,target=/root/.cache/pip p...
#8 2.085 Collecting pyyaml
#8 2.455   Downloading PyYAML-5.3.1.tar.gz (269 kB)
#8 3.484 Building wheels for collected packages: pyyaml
#8 3.485   Building wheel for pyyaml (setup.py): started
#8 3.864   Building wheel for pyyaml (setup.py): finished with status 'done'
#8 3.865   Created wheel for pyyaml: filename=PyYAML-5.3.1-cp36-cp36m-linux_x86_64.whl size=44621 sha256=372ab164f3e88d66fa2571fa048317b22a7c48bf723dfecbac4e058e9037c4fd
#8 3.865   Stored in directory: /root/.cache/pip/wheels/e5/9d/ad/2ee53cf262cba1ffd8afe1487eef788ea3f260b7e6232a80fc
#8 3.866 Successfully built pyyaml
#8 3.901 Installing collected packages: pyyaml
#8 3.961 Successfully installed pyyaml-5.3.1
#8 DONE 4.7s

第二次运行:

#8 [stage-0 2/2] RUN --mount=type=cache,mode=0777,target=/root/.cache/pip p...
#8 2.069 Processing /root/.cache/pip/wheels/e5/9d/ad/2ee53cf262cba1ffd8afe1487eef788ea3f260b7e6232a80fc/PyYAML-5.3.1-cp36-cp36m-linux_x86_64.whl
#8 2.112 Installing collected packages: pyyaml
#8 2.166 Successfully installed pyyaml-5.3.1
#8 DONE 2.5s

更新:

如果我将next用于实验:

If I use next for experiment:

RUN --mount=type=cache,target=/root/.cache/pip ls -alh /root/.cache/pip;pip install pyyaml;ls -alh /root/.cache/pip 

我可以看到下一个:

#7 [stage-0 2/2] RUN --mount=type=cache,target=/root/.cache/pip ls -alh /ro...
#7 0.405 total 8K
#7 0.405 drwxr-xr-x    2 root     root        4.0K Apr 29 01:04 .
#7 0.405 drwxr-xr-x    3 root     root        4.0K Apr 29 01:04 ..
#7 1.957 Collecting pyyaml
#7 2.572   Downloading PyYAML-5.3.1.tar.gz (269 kB)
#7 3.552 Building wheels for collected packages: pyyaml
#7 3.553   Building wheel for pyyaml (setup.py): started
#7 3.885   Building wheel for pyyaml (setup.py): finished with status 'done'
#7 3.887   Created wheel for pyyaml: filename=PyYAML-5.3.1-cp36-cp36m-linux_x86_64.whl size=44621 sha256=4c971f0f901ff8ed3a20c5bb7d94069f15249c665ebe611430db17cb87969cc7
#7 3.887   Stored in directory: /root/.cache/pip/wheels/e5/9d/ad/2ee53cf262cba1ffd8afe1487eef788ea3f260b7e6232a80fc
#7 3.888 Successfully built pyyaml
#7 3.918 Installing collected packages: pyyaml
#7 3.972 Successfully installed pyyaml-5.3.1
#7 4.451 WARNING: You are using pip version 20.0.2; however, version 20.1 is available.
#7 4.451 You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.
#7 4.512 total 20K
#7 4.512 drwxr-xr-x    5 root     root        4.0K Apr 29 01:04 .
#7 4.512 drwxr-xr-x    3 root     root        4.0K Apr 29 01:04 ..
#7 4.512 drwxr-xr-x    5 root     root        4.0K Apr 29 01:04 http
#7 4.512 drwxr-xr-x    2 root     root        4.0K Apr 29 01:04 selfcheck
#7 4.512 drwxr-xr-x    3 root     root        4.0K Apr 29 01:04 wheels
#7 DONE 4.7s

再次在上方重新运行,情况相同.因此,如果未设置mode,则该构建工具包将不会从Docker主机挂载缓存.但是,如果将模式设置为mode,即使使用0755,也可以.

Rerun above again, the things same. So looks like if not set mode, the buildkit won't mount a cache from docker host. But if set a mode mode, even with 0755, it's ok.

所以,现在,我强烈猜测这是MACOS上buildkit的错误,即:如果未设置mode,它将不会为您安装缓存.但是这种行为在linux上是可以的.

So, now I strongly guess it's a bug of buildkit on MACOS, that is: if not set mode, it will not mount cache for you. But the behavior is ok on linux.

这篇关于Docker BuildKit --mount = type = cache无法正常工作,为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆