Using Container Entrypoint
The VulnScout container ships with an entrypoint script at /scan/src/entrypoint.sh.
This is what the ./vulnscout host wrapper calls under the hood. You can also invoke it directly via docker exec (or podman exec) for advanced workflows or CI pipeline integration where you manage the container yourself.
docker exec <container> /scan/src/entrypoint.sh [OPTIONS]
# or
podman exec <container> /scan/src/entrypoint.sh [OPTIONS]
Note: VulnScout is compatible with both Docker and Podman. All
dockercommands shown in this page can be replaced withpodman.
Container Lifecycle
When the container starts with no arguments, it enters daemon mode — it stays alive and waits for commands sent via docker exec (or podman exec). This is the mode used by the ./vulnscout host wrapper.
# The container starts in daemon mode by default
docker run -d --name vulnscout sflinux/vulnscout:latest
# Then send commands to it
docker exec vulnscout /scan/src/entrypoint.sh --serve
Command Reference
Settings
Flag |
Description |
|---|---|
|
Project name for subsequent commands (default: |
|
Variant name for subsequent commands (default: |
Input Commands
Flag |
Description |
|---|---|
|
Add an SPDX 2/3 SBOM file or archive ( |
|
Add a Yocto CVE check JSON file |
|
Add an OpenVEX JSON file |
|
Add a CycloneDX file |
|
Add a Grype results file ( |
|
Export current DB as CycloneDX, run Grype on it, and merge results back |
|
Remove all staged input files |
Scan & Output Commands
Flag |
Description |
|---|---|
|
Run scan then start the interactive web UI (port 7275). Incompatible with |
|
Generate a report from a template (name or path). If a path is given, the template is staged automatically |
|
Export project as SPDX 3.0 SBOM to |
|
Export project as CycloneDX 1.6 SBOM to |
|
Export project as OpenVEX document to |
|
Export custom (review) assessments of the project as |
|
Import custom assessments from |
|
Exit with code 2 if expression matches any vulnerability. Incompatible with |
|
Delete a past scan by its ID |
Data Retrieval Commands
Flag |
Description |
|---|---|
|
List all projects and their variants |
|
List all past scans |
|
Output objects in JSON format |
Configuration Commands
Flag |
Description |
|---|---|
|
Set a persistent config value in |
|
Show current configuration (sensitive values masked) |
|
Remove a config key |
Other Commands
Flag |
Description |
|---|---|
|
Show help message |
|
Print the VulnScout version |
|
Enter daemon mode (default when no arguments are given) |
Exit Codes
Code |
Meaning |
|---|---|
|
Success |
|
Execution error (invalid arguments, scan failure, configuration error) |
|
Match condition triggered — at least one vulnerability matched the expression |
Execution Order
When multiple flags are provided in a single invocation, the entrypoint processes them in this order:
Input staging — Files specified with
--add-*are copied into/scan/inputs/<type>/Scan — If new inputs, a match condition, or a Grype scan was requested, the scan pipeline runs:
Database migration (
flask db upgrade)Web server started in background (if
--serve)Input files merged into the database
Grype scan (if
--perform-grype-scan)Vulnerability processing (NVD enrichment, EPSS scoring)
Input files cleaned up after processing
Reports — Templates specified with
--reportare generatedExports — SBOM formats specified with
--export-*are writtenCustom assessments — Export/import of review assessments
Internal Paths
The following paths inside the container are relevant:
Path |
Purpose |
|---|---|
|
Base directory for the VulnScout application |
|
Python/Flask backend source code |
|
Staging area for input files (cleaned after each scan) |
|
Default output directory for reports and exports |
|
Custom report templates (user-installed, persisted via cache volume) |
|
Built-in report templates |
|
SQLite database |
|
Persistent configuration file |
|
Scan progress status (used by the web UI) |
Examples
Add inputs and start the web UI:
docker exec vulnscout /scan/src/entrypoint.sh \
--project demo --variant x86 \
--add-spdx /scan/inputs/sbom.spdx.json \
--add-cve-check /scan/inputs/cve-check.json \
--serve
Run a CI scan with a match condition:
docker exec vulnscout /scan/src/entrypoint.sh \
--project demo --variant x86 \
--add-spdx /scan/inputs/sbom.spdx.json \
--match-condition "cvss >= 9.0 or (cvss >= 7.0 and epss >= 50%)"
Generate reports and export SBOMs without a new scan:
docker exec vulnscout /scan/src/entrypoint.sh \
--project demo \
--report summary.adoc \
--report all_assessments.adoc \
--export-spdx --export-cdx
Set persistent configuration:
docker exec vulnscout /scan/src/entrypoint.sh --config NVD_API_KEY abc123
docker exec vulnscout /scan/src/entrypoint.sh --config-list
Legacy Setup Detection
If the container detects a legacy docker-compose setup (an openvex.json output exists but no SQLite database), it will:
In interactive mode: display a warning notification in the web UI
In non-interactive mode: exit with code 2 and print migration instructions
Use the migration.sh script on the host to import legacy data into the new database format. See the VulnScout CLI page for details.