#7088·buildkit

--mount=type=cache 在并行构建中意外为空

作者: ap-wtioit创建于 2026年8月27日更新于 2026年8月31日
`bash.Dockerfile` 点击展开
dockerfile
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"
`build_parallel.sh` 点击展开
bash
#!/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
使用 `./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 ``` 完整的构建日志, 点击展开
+ 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
…