The easiest and most reliable way to install Clair (the open-source static container vulnerability scanner) on a Linux host is by using Docker.
Because Clair is a stateless API service, it relies on a PostgreSQL database to store its vulnerability definitions and indexing data.
Follow this step-by-step guide to set up a PostgreSQL database and run Clair on your Linux system.
Prerequisites
Ensure your Linux system has Docker and curl installed:
Bash
sudo apt update && sudo apt install -y docker.io curl # Debian/Ubuntu# ORsudo dnf install -y docker curl # RHEL/Rocky Linux/Fedora
Step 1: Start the PostgreSQL Database
Clair requires PostgreSQL (version 13 or newer). Start a database container and create the database for Clair:
Bash
docker run -d \ --name clair-db \ -p 5432:5432 \ -e POSTGRES_DB=clair \ -e POSTGRES_USER=postgres \ -e POSTGRES_PASSWORD=clair_password_123 \ postgres:15
Step 2: Create the Clair Configuration
Clair needs a config.yaml file to tell it how to connect to PostgreSQL and run its updaters.
- Create a directory for the config:
mkdir -p ./clair_config - Generate a basic
config.yamlusing this content (ensure your database connection string matches the password you used in Step 1):cat <<EOF > ./clair_config/config.yaml http_listen_addr: ":6060" introspection_addr: ":6061" log_level: "info" database: type: "pgsql" options: # Replace with your host IP if Docker cannot resolve localhost back to the host source: "host=host.docker.internal port=5432 user=postgres password=clair_password_123 dbname=clair sslmode=disable" migrations: true updater: interval: "12h" EOF
Step 3: Run the Clair Container
Deploy the official Clair v4 image from Red Hat’s Quay registry:
Bash
docker run -d \ --name clair \ -p 6060:6060 \ -p 6061:6061 \ --add-host=host.docker.internal:host-gateway \ -v $(pwd)/clair_config:/config \ -e CLAIR_CONF=/config/config.yaml \ -e CLAIR_MODE=combo \ quay.io/projectquay/clair:latest
CLAIR_MODE=combo: Instructs Clair to run the indexer, matcher, and updater all within a single process (standard for single-host deployments).--add-host...: Allows the Clair container to reach the Postgres container running on the host’s localhost port.
Step 4: Verify the Installation
Verify that Clair is running and healthy:
Bash
curl http://localhost:6061/health
You should receive an HTTP/1.1 200 OK or a JSON status indicating that the application is healthy.
Note on Initial Setup: On its first boot, Clair’s updater will immediately begin downloading massive vulnerability feeds (CVEs, Red Hat, Ubuntu, Alpine lists). This synchronization can take anywhere from 15 minutes to an hour depending on your network speed.
Step 5: Interacting with Clair (clairctl)
To submit local or remote container images to Clair for scanning, install clairctl (the official command-line interface):
Bash
# Download the latest Linux amd64 binarywget https://github.com/quay/clair/releases/latest/download/clairctl-linux-amd64# Make it executable and move it to your PATHchmod +x clairctl-linux-amd64sudo mv clairctl-linux-amd64 /usr/local/bin/clairctl
To scan an image (such as ubuntu:focal), run:
Bash
clairctl --config ./clair_config/config.yaml report ubuntu:focal


