GitHub Action to set up Docker Buildx
1,381
stars
785
commits
TypeScript
primary language
Sep 4, 2026
updated
GitHub Action to set up Docker Buildx.
This action will create and boot a builder that can be used in the following
steps of your workflow if you're using Buildx or the build-push action.
By default, the docker-container driver
will be used to be able to build multi-platform images and export cache using
a BuildKit container.

name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
-
# Add support for more platforms with QEMU (optional)
# https://github.com/docker/setup-qemu-action
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
The following inputs can be used as step.with keys:
Listtype is a newline-delimited stringdriver-opts: | image=moby/buildkit:master network=host
CSVtype must be a comma-delimited stringplatforms: linux/amd64,linux/arm64
| Name | Type | Default | Description |
|---|---|---|---|
version | String | Buildx version. (eg. v0.3.0, latest, https://github.com/docker/buildx.git#master) | |
name | String | Name of the builder. If not specified, one will be generated or if it already exists, it will be used instead of creating a new one | |
driver | String | docker-container | Sets the builder driver to be used |
driver-opts | List | List of additional driver-specific options (eg. image=moby/buildkit:master) | |
buildkitd-flags | String | BuildKit daemon flags | |
buildkitd-config * | String | BuildKit daemon config file | |
buildkitd-config-inline * | String | Same as buildkitd-config but inline | |
use | Bool | true | Switch to this builder instance |
endpoint | String | Optional address for docker socket or context from docker context ls | |
platforms | List/CSV | Fixed platforms for current node. If not empty, values take priority over the detected ones | |
append | YAML | Append additional nodes to the builder | |
keep-state | Bool | false | Keep BuildKit state on cleanup. This is only useful on persistent self-hosted runners |
cache-binary | Bool | true | Cache buildx binary to GitHub Actions cache backend |
cleanup | Bool | true | Cleanup temp files and remove builder at the end of a job |
[!IMPORTANT] If you set the
buildkitd-flagsinput, the default flags (--allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host) will be reset. If you want to retain the default behavior, make sure to include these flags in your custombuildkitd-flagsvalue.
[!NOTE]
buildkitd-configandbuildkitd-config-inlineare mutually exclusive.
The following outputs are available:
| Name | Type | Description |
|---|---|---|
name | String | Builder name |
driver | String | Builder driver |
platforms | String | Builder node platforms (preferred and/or available) |
nodes | JSON | Builder nodes metadata |
The following official docker environment variables are supported:
| Name | Type | Default | Description |
|---|---|---|---|
DOCKER_CONFIG | String | ~/.docker | The location of your client configuration files |
nodes output| Name | Type | Description |
|---|---|---|
name | String | Node name |
endpoint | String | Node endpoint |
driver-opts | List | Options for the driver |
status | String | Node status |
buildkitd-flags | String | Flags for buildkitd daemon |
buildkit | String | BuildKit version |
platforms | String | Platforms available |
Example:
[
{
"name": "builder-8fa135e1-9bce-4a29-9368-46a09a1d750d0",
"endpoint": "unix:///var/run/docker.sock",
"status": "running",
"buildkitd-flags": "--allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host",
"buildkit": "v0.27.1",
"platforms": "linux/amd64,linux/amd64/v2,linux/amd64/v3,linux/386"
}
]
Want to contribute? Awesome! You can find information about contributing to this project in the CONTRIBUTING.md
TypeScript
87.3%
Dockerfile
6.4%
JavaScript
3.2%
HCL
3.1%
GitHub Action to set up Docker Buildx
1,381
stars
785
commits
TypeScript
primary language
Sep 4, 2026
updated
GitHub Action to set up Docker Buildx.
This action will create and boot a builder that can be used in the following
steps of your workflow if you're using Buildx or the build-push action.
By default, the docker-container driver
will be used to be able to build multi-platform images and export cache using
a BuildKit container.

name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
-
# Add support for more platforms with QEMU (optional)
# https://github.com/docker/setup-qemu-action
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
The following inputs can be used as step.with keys:
Listtype is a newline-delimited stringdriver-opts: | image=moby/buildkit:master network=host
CSVtype must be a comma-delimited stringplatforms: linux/amd64,linux/arm64
| Name | Type | Default | Description |
|---|---|---|---|
version | String | Buildx version. (eg. v0.3.0, latest, https://github.com/docker/buildx.git#master) | |
name | String | Name of the builder. If not specified, one will be generated or if it already exists, it will be used instead of creating a new one | |
driver | String | docker-container | Sets the builder driver to be used |
driver-opts | List | List of additional driver-specific options (eg. image=moby/buildkit:master) | |
buildkitd-flags | String | BuildKit daemon flags | |
buildkitd-config * | String | BuildKit daemon config file | |
buildkitd-config-inline * | String | Same as buildkitd-config but inline | |
use | Bool | true | Switch to this builder instance |
endpoint | String | Optional address for docker socket or context from docker context ls | |
platforms | List/CSV | Fixed platforms for current node. If not empty, values take priority over the detected ones | |
append | YAML | Append additional nodes to the builder | |
keep-state | Bool | false | Keep BuildKit state on cleanup. This is only useful on persistent self-hosted runners |
cache-binary | Bool | true | Cache buildx binary to GitHub Actions cache backend |
cleanup | Bool | true | Cleanup temp files and remove builder at the end of a job |
[!IMPORTANT] If you set the
buildkitd-flagsinput, the default flags (--allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host) will be reset. If you want to retain the default behavior, make sure to include these flags in your custombuildkitd-flagsvalue.
[!NOTE]
buildkitd-configandbuildkitd-config-inlineare mutually exclusive.
The following outputs are available:
| Name | Type | Description |
|---|---|---|
name | String | Builder name |
driver | String | Builder driver |
platforms | String | Builder node platforms (preferred and/or available) |
nodes | JSON | Builder nodes metadata |
The following official docker environment variables are supported:
| Name | Type | Default | Description |
|---|---|---|---|
DOCKER_CONFIG | String | ~/.docker | The location of your client configuration files |
nodes output| Name | Type | Description |
|---|---|---|
name | String | Node name |
endpoint | String | Node endpoint |
driver-opts | List | Options for the driver |
status | String | Node status |
buildkitd-flags | String | Flags for buildkitd daemon |
buildkit | String | BuildKit version |
platforms | String | Platforms available |
Example:
[
{
"name": "builder-8fa135e1-9bce-4a29-9368-46a09a1d750d0",
"endpoint": "unix:///var/run/docker.sock",
"status": "running",
"buildkitd-flags": "--allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host",
"buildkit": "v0.27.1",
"platforms": "linux/amd64,linux/amd64/v2,linux/amd64/v3,linux/386"
}
]
Want to contribute? Awesome! You can find information about contributing to this project in the CONTRIBUTING.md
TypeScript
87.3%
Dockerfile
6.4%
JavaScript
3.2%
HCL
3.1%