Docker BuildKit "frontend dockerfile.v0 not found" / Unknown Frontend
BuildKit builds through a "frontend" that turns a Dockerfile into a build graph. This error means BuildKit could not load that frontend - either the built-in one is unavailable, or a # syntax= directive points at an image it cannot pull.
What this error means
A docker build/buildx build fails before any step with failed to solve: frontend dockerfile.v0 not found or no frontend attribute. With a custom # syntax= line it may instead fail pulling the frontend image - often transiently if the registry blipped.
ERROR: failed to solve: frontend dockerfile.v0 not found
# or, with a custom syntax frontend:
ERROR: failed to solve: failed to load frontend "docker/dockerfile:1.7": pull access deniedCommon causes
A bad or unreachable # syntax= frontend image
A # syntax=docker/dockerfile:1.x directive tells BuildKit to fetch that frontend image. A typo, a private mirror, or a registry blip makes the frontend unloadable.
BuildKit is too old or misconfigured
An old BuildKit/buildx without the built-in dockerfile.v0 frontend, or a daemon where BuildKit is disabled, cannot resolve the default frontend.
Air-gapped runner cannot pull the frontend
On a runner without registry access, the external syntax frontend image cannot be pulled, so the build never starts.
How to fix it
Pin a reachable syntax frontend (or drop it)
Reference a frontend image the runner can pull, or remove the directive to use the built-in one.
# syntax=docker/dockerfile:1
# (built-in frontend - no external pull needed if you omit the line entirely)
FROM alpine:3.20Update buildx/BuildKit and confirm it is active
docker buildx version
DOCKER_BUILDKIT=1 docker build --progress=plain .How to prevent it
- Pin
# syntax=to a digest your runners can always pull, or mirror it. - Keep buildx/BuildKit current so the built-in frontend is available.
- Pre-pull the syntax frontend image on air-gapped runners.