1
0
mirror of https://github.com/docker/docs.git synced 2026-10-28 07:15:09 +03:00

docs: document URL blocking in build steps (#26312)

## Summary

The build policy docs covered HTTP downloads through `ADD` but did not
explain how to block URLs requested by `RUN` steps. Add a tested
allowlist example using `"caps": {"exec.proxy": true}` in the policy
file and update the HTTP input reference, with a brief builder flag
example for CI.

Verified that Debian package downloads pass and the blocked URL returns
HTTP 403 and fails the build. Scoped Markdown and Vale checks passed,
with one existing Vale warning on unchanged text.

@netlify /build/policies/usage/

Generated by Codex
This commit is contained in:
David Karlsson
2026-10-13 12:48:09 +02:00
committed by GitHub
parent aa3d2b22d9
commit 8ac30aaec4
2 changed files with 74 additions and 4 deletions

View File

@@ -19,6 +19,7 @@ Build inputs correspond to Dockerfile instructions:
| `FROM alpine:latest` | Image | `input.image` |
| `COPY --from=builder /app /app` | Image | `input.image` |
| `ADD https://example.com/file.tar.gz /` | HTTP | `input.http` |
| `RUN curl https://example.com/` | HTTP | `input.http` |
| `ADD git@github.com:user/repo.git /src` | Git | `input.git` |
| Build context (`.`) | Local | `input.local` |
@@ -27,7 +28,8 @@ Each input type has specific fields available for policy evaluation.
## HTTP inputs
HTTP inputs represent files downloaded over HTTP or HTTPS using the `ADD`
instruction.
instruction, or requests from `RUN` instructions when BuildKit's proxy is
enabled. See [Block URLs in build steps](./usage.md#block-urls-in-build-steps).
### Example Dockerfile

View File

@@ -6,9 +6,9 @@ keywords: build policies, policy eval, docker buildx, policy development, debugg
weight: 20
---
Build policies validate inputs before builds execute. This guide covers how to
develop policies iteratively and apply them to real builds with `docker buildx
build` and `docker buildx bake`.
Build policies validate build inputs and can check HTTP(S) requests during build
steps. This guide covers how to develop policies iteratively and apply them to
builds with `docker buildx build` and `docker buildx bake`.
## Prerequisites
@@ -223,6 +223,74 @@ Use only your specified policy:
$ docker buildx build --policy reset=true,filename=strict.rego .
```
## Block URLs in build steps
To check HTTP(S) requests from `RUN` instructions, add
`"caps": {"exec.proxy": true}` to the policy's `decision` object. This enables
BuildKit's proxy, which checks requests against your `input.http` rules.
By default, these rules only apply to `ADD` downloads.
Save this policy as `Dockerfile.rego` alongside your Dockerfile to allow Debian
package downloads and block requests to other hosts:
```rego {title="Dockerfile.rego"}
package docker
default allow := false
allow if input.local
allow if {
input.image.repo == "debian"
}
allow if {
input.http.host == "deb.debian.org"
}
decision := {
"allow": allow,
"caps": {"exec.proxy": true},
}
```
Test it with this Dockerfile:
```dockerfile {title="Dockerfile"}
FROM debian:trixie
RUN apt-get update && apt-get install -y curl
RUN curl -f http://example.com/
```
```console
$ docker buildx build --no-cache --progress=plain .
```
The package downloads from `deb.debian.org` succeed. The proxy denies the request
to `example.com` with HTTP 403, and `curl -f` fails the build. Use `--no-cache`
when testing to run the steps again.
To restrict individual URLs, use `input.http.url` or match both `input.http.host`
and `input.http.path`. See the [HTTP input reference](./inputs.md#http-inputs).
The proxy supports Linux build steps. Applications must use the injected proxy
environment variables and trust BuildKit's certificate for HTTPS. BuildKit adds
the certificate to the system trust store. Traffic that bypasses the proxy is
blocked.
### Enable the proxy for a CI builder
For a dedicated CI builder, enable the proxy for all builds with
`--buildkitd-flags '--proxy-network'`:
```console
$ docker buildx create --name ci-policy --driver docker-container \
--buildkitd-flags '--proxy-network' --use --bootstrap
```
This replaces the `exec.proxy` opt-in in each policy file. You still need a
policy to restrict URLs.
## Using policies with bake
[Bake](/build/bake/) supports automatic policy loading just like `docker buildx