• Stars
    star
    203
  • Rank 186,029 (Top 4 %)
  • Language
    Shell
  • License
    Other
  • Created 12 months ago
  • Updated 15 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Docker Scout CLI

Docker Scout

Docker Scout is a set of software supply chain features integrated into Docker's user interfaces and command line interface (CLI). These features offer comprehensive visibility into the structure and security of container images. This repository contains installable binaries of the docker scout CLI plugin.

Usage

The CLI documentation is available in this repository.

See the reference documentation to learn about Docker Scout including Docker Desktop and Docker Hub integrations.

Environment Variables

The following environment variables are availabe to configure the Scout CLI:

Name Description
DOCKER_SCOUT_CACHE_FORMAT Format of the local image cache; can be oci or tar
DOCKER_SCOUT_CACHE_DIR Directory where the local SBOM cache is stored
DOCKER_SCOUT_NO_CACHE Disable the local SBOM cache
DOCKER_SCOUT_REGISTRY_TOKEN Registry Access token to authenticate when pulling images
DOCKER_SCOUT_REGISTRY_USER Registry user name to authenticate when pulling images
DOCKER_SCOUT_REGISTRY_PASSWORD Registry password/PAT to authenticate when pulling images
DOCKER_SCOUT_HUB_USER Docker Hub user name to authenticate against the Docker Scout backend
DOCKER_SCOUT_HUB_PASSWORD Docker Hub password/PAT to authenticate against the Docker Scout backend
DOCKER_SCOUT_OFFLINE Offline mode during SBOM indexing
DOCKER_SCOUT_NEW_VERSION_WARN Warn about new versions of the Docker Scout CLI
DOCKER_SCOUT_EXPERIMENTAL_WARN Warn about experimental features
DOCKER_SCOUT_EXPERIMENTAL_POLICY_OUTPUT Disable experimental policy output

CLI Plugin Installation

Docker Desktop

docker scout CLI plugin is available by default on Docker Desktop starting with version 4.17.

Manual Installation

To install it manually:

  • Download the docker-scout binary corresponding to your platform from the latest or other releases.
  • Uncompress it as
    • docker-scout on Linux and macOS
    • docker-scout.exe on Windows
  • Copy the binary to the scout directory
    • $HOME/.docker/scout on Linux and macOS
    • %USERPROFILE%\.docker\scout on Windows
  • Make it executable on Linux and macOS
    • chmod +x $HOME/.docker/scout/docker-scout
  • Authorize the binary to be executable on macOS
    • xattr -d com.apple.quarantine $HOME/.docker/scout/docker-scout
  • Add the scout directory to your .docker/config.json as a plugin directory
    • $HOME/.docker/config.json on Linux and macOS
    • %USERPROFILE%\.docker\config.json on Windows
    • Add the cliPluginsExtraDirs property to the config.json file
{
	...
	"cliPluginsExtraDirs": [
		<full path to the .docker/scout folder>
	],
	...
}

Script Installation

To install, run the following command in your terminal:

curl -sSfL https://raw.githubusercontent.com/docker/scout-cli/main/install.sh | sh -s --

Run as container

A container image to run the Docker Scout CLI in containerized environments is available at docker/scout-cli.

CI Integration

Docker Scout CLI can be used in CI environments. See below for the various ways to integrate the CLI into your CI pipelines.

GitHub Action

An early prototype of running the Docker Scout CLI as part of a GitHub Action workflow is available at docker/scout-action.

The following GitHub Action workflow can be used as a template to integrate Docker Scout:

name: Docker

on:
  push:
    tags: [ "*" ]
    branches:
      - 'main'
  pull_request:
    branches: [ "**" ]
    
env:
  # Use docker.io for Docker Hub if empty
  REGISTRY: docker.io
  IMAGE_NAME: ${{ github.repository }}
  SHA: ${{ github.event.pull_request.head.sha || github.event.after }}

jobs:
  build:

    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          ref: ${{ env.SHA }}
          
      - name: Setup Docker buildx
        uses: docker/[email protected]

      # Login against a Docker registry except on PR
      # https://github.com/docker/login-action
      - name: Log into registry ${{ env.REGISTRY }}
        uses: docker/[email protected]
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ secrets.DOCKER_USER }}
          password: ${{ secrets.DOCKER_PAT }}

      # Extract metadata (tags, labels) for Docker
      # https://github.com/docker/metadata-action
      - name: Extract Docker metadata
        id: meta
        uses: docker/[email protected]
        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
          labels: |
            org.opencontainers.image.revision=${{ env.SHA }}
          tags: |
            type=edge,branch=$repo.default_branch
            type=semver,pattern=v{{version}}
            type=sha,prefix=,suffix=,format=short
      
      # Build and push Docker image with Buildx (don't push on PR)
      # https://github.com/docker/build-push-action
      - name: Build and push Docker image
        id: build-and-push
        uses: docker/[email protected]
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max
      
      - name: Docker Scout
        id: docker-scout
        if: ${{ github.event_name == 'pull_request' }}
        uses: docker/scout-action@dd36f5b0295baffa006aa6623371f226cc03e506
        with:
          command: cves
          image: ${{ steps.meta.outputs.tags }}
          only-severities: critical,high
          exit-code: true

GitLab

Use the following pipeline definition as a template to get Docker Scout integrated in GitLab CI:

docker-build:
  image: docker:latest
  stage: build
  services:
    - docker:dind
  before_script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
    
    # Install curl and the Docker Scout CLI
    - |
      apk add --update curl
      curl -sSfL https://raw.githubusercontent.com/docker/scout-cli/main/install.sh | sh -s -- 
      apk del curl 
      rm -rf /var/cache/apk/* 
    # Login to Docker Hub required for Docker Scout CLI
    - echo "$DOCKER_HUB_PAT" | docker login --username "$DOCKER_HUB_USER" --password-stdin
  script:
    - |
      if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then
        tag=""
        echo "Running on default branch '$CI_DEFAULT_BRANCH': tag = 'latest'"
      else
        tag=":$CI_COMMIT_REF_SLUG"
        echo "Running on branch '$CI_COMMIT_BRANCH': tag = $tag"
      fi
    - docker build --pull -t "$CI_REGISTRY_IMAGE${tag}" .
    
    - |
      if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then
        # Get a CVE report for the built image and fail the pipeline when critical or high CVEs are detected
        docker scout cves "$CI_REGISTRY_IMAGE${tag}" --exit-code --only-severity critical,high    
      else
        # Compare image from branch with latest image from the default branch and fail if new critical or high CVEs are detected
        docker scout compare "$CI_REGISTRY_IMAGE${tag}" --to "$CI_REGISTRY_IMAGE:latest" --exit-code --only-severity critical,high --ignore-unchanged
      fi
    
    - docker push "$CI_REGISTRY_IMAGE${tag}"
  rules:
    - if: $CI_COMMIT_BRANCH
      exists:
        - Dockerfile

CircleCI

Use the following pipeline definition as a template to get Docker Scout integrated in CircleCI project:

version: 2.1

jobs:
  
  build:

    docker:
      - image: cimg/base:stable
    
    environment:
      IMAGE_TAG: docker/scout-demo-service:latest
    
    steps:
      # Checkout the repository files
      - checkout

      # Set up a separate Docker environment to run `docker` commands in
      - setup_remote_docker:
          version: 20.10.24

      # Install Docker Scout and login to Docker Hub
      - run:
          name: Install Docker Scout
          command: |
            env
            curl -sSfL https://raw.githubusercontent.com/docker/scout-cli/main/install.sh | sh -s -- -b /home/circleci/bin
            echo $DOCKER_HUB_PAT | docker login -u $DOCKER_HUB_USER --password-stdin

      # Build the Docker image
      - run:
          name: Build Docker image
          command: docker build -t $IMAGE_TAG .
      
      # Run Docker Scout          
      - run:
          name: Scan image for CVEs
          command: |
            docker-scout cves $IMAGE_TAG --exit-code --only-severity critical,high

workflows:
  build-docker-image:
    jobs:
      - build

Microsoft Azure DevOps Pipelines

Use the following pipeline definition as a template to get Docker Scout integrated in Azure DevOps Pipelines:

trigger:
- main

resources:
- repo: self

variables:
  tag: '$(Build.BuildId)'
  image: 'vonwig/nodejs-service'

stages:
- stage: Build
  displayName: Build image
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: ubuntu-latest
    steps:
    - task: Docker@2
      displayName: Build an image
      inputs:
        command: build
        dockerfile: '$(Build.SourcesDirectory)/Dockerfile'
        repository: $(image)
        tags: |
          $(tag)
    - task: CmdLine@2
      displayName: Find CVEs on image
      inputs:
        script: |
          # Install the Docker Scout CLI
          curl -sSfL https://raw.githubusercontent.com/docker/scout-cli/main/install.sh | sh -s --
          # Login to Docker Hub required for Docker Scout CLI
          docker login -u $(DOCKER_HUB_USER) -p $(DOCKER_HUB_PAT)
          # Get a CVE report for the built image and fail the pipeline when critical or high CVEs are detected
          docker scout cves $(image):$(tag) --exit-code --only-severity critical,high

Jenkins

The following snippet can be added to a Jenkinsfile to install and analyze images:

        stage('Analyze image') {
            steps {
                // Install Docker Scout
                sh 'curl -sSfL https://raw.githubusercontent.com/docker/scout-cli/main/install.sh | sh -s -- -b /usr/local/bin'
                
                // Log into Docker Hub
                sh 'echo $DOCKER_HUB_PAT | docker login -u $DOCKER_HUB_USER --password-stdin'

                // Analyze and fail on critical or high vulnerabilities
                sh 'docker-scout cves $IMAGE_TAG --exit-code --only-severity critical,high'
            }
        }

This example assume two secrets to be available to authenticate against Docker Hub, called DOCKER_HUB_USER and DOCKER_HUB_PAT.

Bitbucket

Use the following pipeline definition as a template to get Docker Scout integrated in Bitbucket Pipelines:

image: docker

pipelines:
  default:
    - step:
        name: Build
        services:
          - docker
        caches:
          - docker
        script:
          - echo "$DOCKER_HUB_PAT" | docker login --username "$DOCKER_HUB_USER" --password-stdin $CI_REGISTRY

          # Install curl and the Docker Scout CLI
          - |
            export DOCKER_BUILDKIT=0
            apk add --update curl
            curl -sSfL https://raw.githubusercontent.com/docker/scout-cli/main/install.sh | sh -s -- 
            apk del curl 
            rm -rf /var/cache/apk/* 
          # Login to Docker Hub required for Docker Scout CLI
          - echo "$DOCKER_HUB_PAT" | docker login --username "$DOCKER_HUB_USER" --password-stdin

          - |
            export DEVELOPMENT_BRANCH="main"
            if [[ "$BITBUCKET_BRANCH" == "$DEVELOPMENT_BRANCH" ]]; then # Bitbucket uses master by default, adjust if your default branch is different
              tag=":latest"
              echo "Running on default branch '$DEVELOPMENT_BRANCH': tag = 'latest'"
            else
              tag=":$BITBUCKET_COMMIT"
              echo "Running on branch '$BITBUCKET_BRANCH': tag = $tag"
            fi
          - docker build --pull -t "$CI_REGISTRY_IMAGE${tag}" .

          - |
            if [[ "$BITBUCKET_BRANCH" == "$DEVELOPMENT_BRANCH" ]]; then
              # Get a CVE report for the built image and fail the pipeline when critical or high CVEs are detected
              docker scout cves "$CI_REGISTRY_IMAGE${tag}" --exit-code --only-severity critical,high    
            else
              # Compare image from branch with latest image from the default branch and fail if new critical or high CVEs are detected            
              docker scout compare "$CI_REGISTRY_IMAGE${tag}" --to "$CI_REGISTRY_IMAGE:latest" --exit-code --only-severity critical,high --ignore-unchanged
            fi
          - docker push "$CI_REGISTRY_IMAGE${tag}"

definitions:
  services:
    docker:
      memory: 2048 # Optional: Increase if needed

This example assumes two secrets to be available to authenticate against Docker Hub, called DOCKER_HUB_USER and DOCKER_HUB_PAT, also is necessary more two secrets called CI_REGISTRY, CI_REGISTRY_IMAGE about registry info.

License

The Docker Scout CLI is licensed under the Terms and Conditions of the Docker Subscription Service Agreement.

More Repositories

1

compose

Define and run multi-container applications with Docker
Go
32,049
star
2

awesome-compose

Awesome Docker Compose samples
HTML
29,388
star
3

kitematic

Visual Docker Container Management on Mac & Windows
JavaScript
12,254
star
4

labs

This is a collection of tutorials for learning how to use Docker with various tools. Contributions welcome.
PHP
11,433
star
5

docker-bench-security

The Docker Bench for Security is a script that checks for dozens of common best-practices around deploying Docker containers in production.
Shell
8,831
star
6

dockercraft

Docker + Minecraft = Dockercraft
Lua
7,057
star
7

docker-py

A Python library for the Docker Engine API
Python
6,638
star
8

machine

Machine management for a container-centric world
Go
6,617
star
9

docker-ce

⚠️ This repository is deprecated and will be archived (Docker CE itself is NOT deprecated) see the https://github.com/docker/docker-ce/blob/master/README.md ⚠️
Go
5,697
star
10

cli

The Docker CLI
Go
4,582
star
11

docs

Source repo for Docker's Documentation
Markdown
4,026
star
12

build-push-action

GitHub Action to build and push Docker images with Buildx
TypeScript
3,892
star
13

buildx

Docker CLI plugin for extended build capabilities with BuildKit
Go
3,220
star
14

genai-stack

Langchain + Docker + Neo4j + Ollama
Python
2,880
star
15

getting-started

Getting started with Docker
JavaScript
2,820
star
16

libchan

Like Go channels over the network
Go
2,471
star
17

for-mac

Bug reports for Docker Desktop for Mac
2,393
star
18

docker-install

Docker installation script
Shell
2,034
star
19

for-win

Bug reports for Docker Desktop for Windows
1,818
star
20

app

Make your Docker Compose applications reusable, and share them on Docker Hub
Go
1,571
star
21

roadmap

Welcome to the Public Roadmap for All Things Docker! We welcome your ideas.
1,445
star
22

compose-on-kubernetes

Deploy applications described in Compose onto Kubernetes clusters
Go
1,420
star
23

docker-credential-helpers

Programs to keep Docker login credentials safe by storing in platform keystores
Go
1,000
star
24

compose-cli

Easily run your Compose application to the cloud with compose-cli
Go
954
star
25

login-action

GitHub Action to login against a Docker registry
TypeScript
909
star
26

libkv

Distributed key/value store abstraction library
Go
850
star
27

setup-buildx-action

GitHub Action to set up Docker Buildx
TypeScript
839
star
28

metadata-action

GitHub Action to extract metadata (tags, labels) from Git reference and GitHub events for Docker
TypeScript
799
star
29

for-linux

Docker Engine for Linux
745
star
30

libcompose

*Unmaintained/Deprecated* An experimental go library providing Compose-like functionality
Go
584
star
31

setup-qemu-action

GitHub Action to install QEMU static binaries
TypeScript
377
star
32

community

327
star
33

go-plugins-helpers

Go helper packages to extend the Docker Engine
Go
320
star
34

hub-tool

🧪 Docker Hub experimental CLI tool
Go
311
star
35

welcome-to-docker

JavaScript
267
star
36

engine-api

DEPRECATED: Please see https://github.com/docker/docker/tree/master/client
Go
266
star
37

hub-feedback

Feedback and bug reports for the Docker Hub
231
star
38

doodle

A Home for Docker Doodles
Go
221
star
39

go-connections

Utility package to work with network connections
Go
204
star
40

go-units

Parse and print size and time units in human-readable format
Go
198
star
41

compose-switch

Go
196
star
42

go-docker

(Still WIP) Official Go SDK for Docker
Go
186
star
43

scan-cli-plugin

Docker Scan is a Command Line Interface to run vulnerability detection on your Dockerfiles and Docker images
Go
177
star
44

gordon

Cli application to manage github pull requests
Go
177
star
45

docker-ce-packaging

Packaging scripts for Docker CE
Makefile
171
star
46

github-actions

⚠️ This repository is deprecated and has been replaced by docker/build-push-action@v2
Go
163
star
47

bake-action

GitHub Action to use Docker Buildx Bake as a high-level build command
TypeScript
158
star
48

sbom-cli-plugin

Plugin for Docker CLI to support SBOM creation using Syft
Go
143
star
49

hacktoberfest-2022

Docker Hacktoberfest 2022
140
star
50

extensions-sdk

Desktop Extensions SDK
133
star
51

go-events

Composable event distribution for Go
Go
131
star
52

libtrust

Primitives for identity and authorization
Go
107
star
53

node-sdk

Docker CLI gRPC JavaScript SDK
JavaScript
106
star
54

compose-ecs

Deploy compose application on ECS
Go
99
star
55

golang-cross

Dockerfile
98
star
56

go-metrics

Package for metrics collection in Docker projects
Go
86
star
57

volumes-backup-extension

Back up, clone, restore, and share Docker volumes effortlessly.
PLpgSQL
77
star
58

desktop-linux

Bug reports for Docker Desktop for Linux
71
star
59

containerd-packaging

Linux distro packaging for containerd
Shell
64
star
60

opensource

Contains documentation and scripts related to the management of Open Source at Docker
Go
62
star
61

getting-started-app

A simple application for the getting started guide in Docker's documentation
JavaScript
62
star
62

dev-environments

59
star
63

multi-container-app

EJS
58
star
64

scout-action

Docker Scout GitHub Action
JavaScript
57
star
65

actions-toolkit

Toolkit for Docker (GitHub) Actions
TypeScript
46
star
66

extension-ideas

A place to suggest new ideas for Docker Extensions and get new ideas of what to build for the larger Docker community
45
star
67

binfmt

Please use https://github.com/linuxkit/linuxkit/tree/master/pkg/binfmt instead of this repo
Go
43
star
68

index-cli-plugin

Go
40
star
69

whalesay

A repository in support of the Docker's official whalesay image
Perl
38
star
70

dev-envs-extension

TypeScript
36
star
71

code-of-conduct

35
star
72

HttpOverStream

.NET library for using HTTP 1.1 over streams, especially Windows Named Pipes
C#
33
star
73

scout-demo-service

Dockerfile
26
star
74

get-involved

Get Involved with Docker
CSS
24
star
75

buildkit-syft-scanner

BuildKit Syft scanner
Go
21
star
76

packaging

Docker Packaging (apk, deb, rpm, static)
Dockerfile
19
star
77

go

Go packages with small patches autogenerated (used for canonical/json)
Go
18
star
78

cli-docs-tool

Utilities to generate (reference) documentation for the docker CLI
Go
18
star
79

base-cli-plugin

Experimental Docker CLI plugin to detect base images
Go
16
star
80

notary-official-images

Shell
16
star
81

go-imageinspect

Go
13
star
82

docker-ai

Docker AI is an extension for VSCode which provides runnable terminals inside of notebooks. Docker AI integrates AI recommendations to assist with debugging and improving your Docker projects.
13
star
83

python-docker

A simple Python app for the Python Language Guide in Docker's Docs
Python
11
star
84

babashka-pod-docker

Go
11
star
85

dc23-secure-workshop

DockerCon 2023 Secure Development with Docker hands-on exercises code
Dockerfile
10
star
86

import-restrictions

Restrict imports in your go project
Go
9
star
87

extensions-submissions

Submit your Docker Extension here
Shell
9
star
88

engine-sync

Sync moby/moby with docker/engine
Shell
8
star
89

docker-nodejs-sample

A simple Node.js application for the guide in Docker's documentation
JavaScript
7
star
90

docker-dotnet-sample

A simple .NET web application
HTML
7
star
91

python-docker-dev

A simple Python app for the Python Language Guide in Docker's Docs
Python
7
star
92

database-extension

TypeScript
6
star
93

buildx-desktop

6
star
94

github-actions-runner

Docker's containerized github-actions runner
Shell
6
star
95

desktop-action

Docker Desktop action
6
star
96

docker-php-sample

A simple PHP application
PHP
5
star
97

winget-pkgs

The Microsoft community Windows Package Manager manifest repository
PowerShell
4
star
98

compose-desktop

3
star
99

cli-scan-feedback

Bug report for CLI Scanning
3
star
100

docker-spcs-demo

2
star