build-push-action

:octocat: GitHub Action to build and push Docker images with Buildx

Github星跟蹤圖

GitHub release
GitHub marketplace
CI workflow
Test workflow
Codecov

Upgrade from v1

v2 of this action includes significant updates and now uses Docker Buildx. It's
also rewritten as a typescript-action to be as close as possible
of the GitHub Runner during its execution.

Upgrade notes with many usage examples have been added to handle most use cases but
v1 is still available through releases/v1 branch.

About

GitHub Action to build and push Docker images with Buildx with full support of the
features provided by Moby BuildKit builder toolkit. This includes multi-platform
build, secrets, remote cache, etc. and different builder deployment/namespacing options.

Screenshot


Usage

By default, this action uses the Git context so you don't need to use the
actions/checkout action to checkout the repository because this will be
done directly by buildkit. The git reference will be based on the event that triggered your workflow
and will result in the following context: https://github.com/<owner>/<repo>.git#<ref>.

Be careful because any file mutation in the steps that precede the build step will be ignored since
the context is based on the git reference. However, you can use the Path context using the
context input alongside the actions/checkout action to remove
this restriction.

In the examples below we are using 3 other actions:

  • setup-buildx action will create and boot a builder using by
    default the docker-container builder driver.
    This is not required but recommended using it to be able to build multi-platform images, export cache, etc.
  • setup-qemu action can be useful if you want
    to add emulation support with QEMU to be able to build against more platforms.
  • login action will take care to log in against a Docker registry.

Git context

name: ci

on:
  push:
    branches:
      - 'master'

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      -
        name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      -
        name: Login to DockerHub
        uses: docker/login-action@v1 
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      -
        name: Build and push
        id: docker_build
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: user/app:latest
      -
        name: Image digest
        run: echo ${{ steps.docker_build.outputs.digest }}

Building from the current repository automatically uses the GitHub Token
so it does not need to be passed. If you want to authenticate against another private repository, you have to use
a secret named GIT_AUTH_TOKEN to be able to authenticate against it with buildx:

      -
        name: Build and push
        id: docker_build
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: user/app:latest
          secrets:, GIT_AUTH_TOKEN=${{ secrets.MYTOKEN }}

:warning: Subdir for Git context is not yet supported (moby/buildkit#1684)
but you can use the path context in the meantime. More info on Docker docs website.

Path context

name: ci

on:
  push:
    branches:
      - 'master'

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v2
      -
        name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      -
        name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      -
        name: Build and push
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: user/app:latest

Advanced usage

Customizing

inputs

Following inputs can be used as step.with keys

List type is a newline-delimited string

cache-from:, >   user/app:cache
  type=local,src=path/to/dir

CSV type is a comma-delimited string

tags: name/app:latest,name/app:1.0.0
```, Name, Type, Description, ---------------------, ----------, ------------------------------------, `allow`, List/CSV, List of [extra privileged entitlement](https://github.com/docker/buildx/blob/master/docs/reference/buildx_build.md#allow) (eg. `network.host,security.insecure`), `builder`, String, Builder instance (see [setup-buildx](https://github.com/docker/setup-buildx-action) action), `build-args`, List, List of build-time variables, `cache-from`, List, List of [external cache sources](https://github.com/docker/buildx/blob/master/docs/reference/buildx_build.md#cache-from) (eg. `type=local,src=path/to/dir`), `cache-to`, List, List of [cache export destinations](https://github.com/docker/buildx/blob/master/docs/reference/buildx_build.md#cache-to) (eg. `type=local,dest=path/to/dir`), `context`, String, Build's context is the set of files located in the specified [`PATH` or `URL`](https://docs.docker.com/engine/reference/commandline/build/) (default [Git context](#git-context)), `file`, String, Path to the Dockerfile. (default `{context}/Dockerfile`), `labels`, List, List of metadata for an image, `load`, Bool, [Load](https://github.com/docker/buildx/blob/master/docs/reference/buildx_build.md#load) is a shorthand for `--output=type=docker` (default `false`), `network`, String, Set the networking mode for the `RUN` instructions during build, `no-cache`, Bool, Do not use cache when building the image (default `false`), `outputs`, List, List of [output destinations](https://github.com/docker/buildx/blob/master/docs/reference/buildx_build.md#output) (format: `type=local,dest=path`), `platforms`, List/CSV, List of [target platforms](https://github.com/docker/buildx/blob/master/docs/reference/buildx_build.md#platform) for build, `pull`, Bool, Always attempt to pull a newer version of the image (default `false`), `push`, Bool, [Push](https://github.com/docker/buildx/blob/master/docs/reference/buildx_build.md#push) is a shorthand for `--output=type=registry` (default `false`), `secrets`, List, List of secrets to expose to the build (eg. `key=string`, `GIT_AUTH_TOKEN=mytoken`), `secret-files`, List, List of secret files to expose to the build (eg. `key=filename`, `MY_SECRET=./secret.txt`), `ssh`, List, List of SSH agent socket or keys to expose to the build, `tags`, List/CSV, List of tags, `target`, String, Sets the target stage to build, ### outputs

Following outputs are available, Name, Type, Description, ---------------, ---------, ---------------------------------------, digest, String, Image content-addressable identifier also called a digest, ## Troubleshooting

See TROUBLESHOOTING.md

Keep up-to-date with GitHub Dependabot

Since Dependabot
has native GitHub Actions support,
to enable it on your GitHub repo all you need to do is add the .github/dependabot.yml file:

version: 2
updates:
  # Maintain dependencies for GitHub Actions
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "daily"

主要指標

概覽
名稱與所有者docker/build-push-action
主編程語言TypeScript
編程語言Dockerfile (語言數: 4)
平台
許可證Apache License 2.0
所有者活动
創建於2020-02-17 11:35:27
推送於2025-04-24 14:19:37
最后一次提交2025-04-23 18:39:17
發布數64
最新版本名稱v6.16.0 (發布於 )
第一版名稱v1.0 (發布於 )
用户参与
星數4.7k
關注者數38
派生數607
提交數1k
已啟用問題?
問題數769
打開的問題數36
拉請求數365
打開的拉請求數7
關閉的拉請求數119
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?