-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Description
Similar to #1981, but it's still happening with 20.10.7, and I have a minimal reproduction case.
Version information
- Macbook Air (M1, 2020)
- Mac OS Big Sur 11.4
- Docker Desktop 3.5.2 (66501)
% docker version
Client:
Cloud integration: 1.0.17
Version: 20.10.7
API version: 1.41
Go version: go1.16.4
Git commit: f0df350
Built: Wed Jun 2 11:56:23 2021
OS/Arch: darwin/arm64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.7
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: b0f5bc3
Built: Wed Jun 2 11:55:36 2021
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.4.6
GitCommit: d71fcd7d8303cbf684402823e425e9dd2e99285d
runc:
Version: 1.0.0-rc95
GitCommit: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Steps to reproduce
Have this Dockerfile:
# syntax=docker/dockerfile:1
FROM debian:buster-slim
RUN yes | head -20 | tee /yes.txt
COPY . /app
Run this script:
#!/bin/bash
set -euo pipefail
DOCKER_BUILDKIT=1
docker system prune -a -f
docker build \
-t circularly/docker-cache-issue-20210722:cachebug \
--cache-from circularly/docker-cache-issue-20210722:cachebug \
--build-arg BUILDKIT_INLINE_CACHE=1 \
.
docker push circularly/docker-cache-issue-20210722:cachebug
# this causes a change in the local files to simulate a code-only change
date > date_log.txt
(also here: https://github.com/jli/docker-cache-issue-20210722 )
What I see: When I run the above script multiple times, it alternates every time whether the RUN yes | head -20 | tee /yes.txt
step is cached or not. The docker build
output alternates between:
=> [2/3] RUN yes | head -20 | tee /yes.txt
=> CACHED [2/3] RUN yes | head -20 | tee /yes.txt
With docker-container driver
This comment by @tonistiigi suggested to use the "container driver". This does seem to work! I tried replacing the docker build
command from above with this:
docker buildx create --driver docker-container --name cache-bug-workaround
docker buildx build --builder cache-bug-workaround --load \
-t circularly/docker-cache-issue-20210722:cachebug-containerdriver \
--cache-from circularly/docker-cache-issue-20210722:cachebug-containerdriver \
--build-arg BUILDKIT_INLINE_CACHE=1 \
.
docker buildx rm --builder cache-bug-workaround
This consistently results in the RUN yes ...
step being cached!
The problem is that docker buildx
doesn't appear to a subcommand in the https://hub.docker.com/_/docker image, which is what we use in CI. Is there a way to use the container driver when using that image?
Could you help me understand why this is needed?
Will this be fixed with a future release?