Вы можете добавить mode=0777
, например, к Dockerfile
, чтобы он работал.
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.
1-й прогон:
#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
2-й прогон:
#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
ОБНОВЛЕНИЕ:
Если я использую следующее для эксперимента:
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
, buildkit не будет монтировать кэш с хоста docker. Но если установить режим mode
, даже с 0755
, это нормально.
Итак, теперь я настоятельно полагаю, что это ошибка buildkit на MACOS, то есть: если не установить mode
, он будет не смонтировать кеш для вас. Но поведение нормально на linux.