--mount=type=cache 在并行构建中意外为空
作者: ap-wtioit创建于 2026年8月27日更新于 2026年8月31日
`bash.Dockerfile` 点击展开
`build_parallel.sh` 点击展开
使用 `./build_parallel.sh` 并行构建会出现以下错误:
```
2: 0.246 + ls -al /cache_dir/*.txt
2: 0.247 ls: cannot access '/cache_dir/*.txt': No such file or directory
```
完整的构建日志, 点击展开
FROM Python:3.12-slim-bookworm
RUN --mount=target=/cache_dir,type=cache \
set -x \
&& find /cache_dir \
&& echo "$((RANDOM % 5000))" > "/cache_dir/$((RANDOM % 5000)).txt" \
&& sleep 2 \
&& echo "OK stage 1"
RUN --mount=target=/cache_dir,type=cache \
set -x \
&& find /cache_dir \
&& ls -al /cache_dir/*.txt \
&& echo "OK stage 2"#!/usr/bin/env bash
set -ex
builds=${1:-2}
started_builds=()
function prefix() {
local prefix=$1
shift
"$@" 2>&1 | awk "{print \"$prefix: \" \$0}"
return "${PIPESTATUS[0]}"
}
function run_build() {
local i=$1
sleep "$i.5"
prefix "$i" Docker build --no-cache -f "bash$i.Dockerfile" .
}
prefix 1 run_build &
started_builds+=("$!")
for i in $(seq 2 "$builds"); do
cp bash.Dockerfile "bash$i.Dockerfile"
run_build "$i" &
started_builds+=("$!")
done
status=0
for started_build in "${started_builds[@]}"; do
if ! wait "$started_build"; then
status=$((status + 1))
fi
done
if [[ $status != 0 ]] ; then
echo "There were errors!" 1>&2
exit 1
fi+ builds=2
+ started_builds=()
+ started_builds+=("$!")
+ prefix 1 run_build
+ local prefix=1
+ shift
++ seq 2 2
+ run_build
+ awk '{print "1: " $0}'
+ for i in $(seq 2 "$builds")
+ cp bash.Dockerfile bash2.Dockerfile
1: + local i=
1: + sleep .5
+ started_builds+=("$!")
+ status=0
+ for started_build in
…内容来源: moby/buildkit