DirectorySecurity AdvisoriesPricing
Sign in
Directory
apache-polaris-fips logoFIPS

apache-polaris-fips

packaged by Chainguard

Last changed
Request a free trial

Contact our team to test out this image for free. Please also indicate any other images you would like to evaluate.

Tags
Overview
Comparison
Provenance
Specifications
SBOM
Vulnerabilities
Advisories

Chainguard Container for apache-polaris-fips

FIPS-enabled Wolfi-based container image for Apache Polaris, an open source catalog for Apache Iceberg.

Chainguard Containers are regularly-updated, secure-by-default container images.

Download this Container Image

For those with access, this container image is available on cgr.dev:

docker pull cgr.dev/ORGANIZATION/apache-polaris-fips:latest

Be sure to replace the ORGANIZATION placeholder with the name used for your organization's private repository within the Chainguard Registry.

Compatibility Notes

Chainguard's apache-polaris-fips container image is comparable to the upstream apache/polaris image, with the following differences:

  • Like all other Chainguard Containers, it features a stripped down, minimal design and has few-to-zero CVEs.
  • It is built on Chainguard OS rather than the Red Hat UBI 9 OpenJDK runtime, so the JBoss run-java.sh launcher and the /opt/jboss module tree are not present. Like upstream the image declares no entrypoint; its Cmd runs java -jar quarkus-run.jar with the working directory set to /deployments — the directory run-java.sh cds into upstream, and the one Quarkus resolves config/application.properties against. Upstream's declared WorkingDir is /home/polaris, but the JVM never actually runs there. Environment variables interpreted only by run-java.sh, such as JAVA_OPTS_APPEND and AB_JOLOKIA_OFF, have no effect. The container JVM tuning that launcher applies is preserved directly in JDK_JAVA_OPTIONS (-XX:MaxRAMPercentage=80.0, -XX:+UseParallelGC, -XX:MinHeapFreeRatio=10, -XX:MaxHeapFreeRatio=20, -XX:GCTimeRatio=4, -XX:AdaptiveSizePolicyWeight=90, -XX:+ExitOnOutOfMemoryError), so heap sizing and out-of-memory behaviour match upstream. Override that variable to pass your own JVM flags, keeping in mind it replaces those defaults.
  • It runs as the unprivileged polaris user (uid 10000, gid 10001), matching upstream, so the Apache Polaris Helm chart works unmodified.
  • It includes busybox but no package manager. busybox is required, not incidental: Iceberg's HadoopFileIO shells out to chmod and /bin/ls whenever a catalog writes table metadata to a file:// warehouse, so without it every table create against FILE storage fails. Use the -dev variant if you need a fuller userspace.

The Quarkus fast-jar layout under /deployments (quarkus-run.jar, lib/, app/, quarkus/), the exposed ports, and the configuration surface are unchanged, so existing deployments and Helm values carry over.

FIPS Support

The apache-polaris-fips Chainguard Image ships with a validated redistribution of OpenSSL's FIPS provider module. For more on FIPS support in Chainguard Images, consult the guide on FIPS-enabled Chainguard Images on Chainguard Academy.

Two consequences are worth knowing before you deploy, both covered under Configuration: JAVA_TOOL_OPTIONS must keep its BouncyCastle FIPS flags, and any keystore or truststore you supply must be in BCFKS format.

Prerequisites

Apache Polaris needs a persistence backend and a bootstrapped realm before it will serve requests. For anything beyond a smoke test, provision a PostgreSQL database and bootstrap it with the Polaris Admin Tool. The in-memory persistence used in the examples below is for evaluation only, and it discards every catalog when the container stops.

Getting Started

Start a catalog server with in-memory persistence. POLARIS_BOOTSTRAP_CREDENTIALS makes Polaris bootstrap the realm and create the root principal on startup, which is what lets you obtain a token straight away:

docker run --rm -p 8181:8181 -p 8182:8182 \
  -e POLARIS_BOOTSTRAP_CREDENTIALS=POLARIS,root,s3cr3t \
  cgr.dev/ORGANIZATION/apache-polaris-fips:latest

Polaris serves its APIs on 8181 and its health and metrics endpoints on the management port 8182:

curl -fsS http://localhost:8182/q/health/ready

Request an OAuth2 token for the bootstrapped principal and call the management API with it:

TOKEN=$(curl -fsS http://localhost:8181/api/catalog/v1/oauth/tokens \
  --user root:s3cr3t \
  -d grant_type=client_credentials \
  -d scope=PRINCIPAL_ROLE:ALL | jq -r .access_token)

curl -fsS http://localhost:8181/api/management/v1/catalogs \
  -H "Authorization: Bearer $TOKEN"

Iceberg engines connect to the REST catalog at http://localhost:8181/api/catalog, using the catalog name as the warehouse.

Helm

The upstream chart works against this image; point it at your organization's repository:

helm repo add polaris https://downloads.apache.org/polaris/helm-chart
helm install polaris polaris/polaris \
  --set image.repository=cgr.dev/ORGANIZATION/apache-polaris-fips \
  --set image.tag=latest

Configuration

Polaris is a Quarkus application, so every setting can be supplied as a system property, an environment variable, or an application.properties file. Because the image's working directory is /deployments, Quarkus picks up /deployments/config/application.properties automatically — the same path the Helm chart mounts its ConfigMap into.

A minimal production-shaped configuration switches persistence to PostgreSQL and supplies the token broker key pair rather than letting Polaris generate an ephemeral one, so that tokens stay valid across restarts and replicas:

# /deployments/config/application.properties
polaris.persistence.type=relational-jdbc
quarkus.datasource.jdbc.url=jdbc:postgresql://postgres:5432/polaris
polaris.authentication.token-broker.type=rsa-key-pair
polaris.authentication.token-broker.rsa-key-pair.public-key-file=/deployments/config/public.pem
polaris.authentication.token-broker.rsa-key-pair.private-key-file=/deployments/config/private.pem

Mount it with -v ./config:/deployments/config:ro. Polaris runs production readiness checks at startup and refuses to boot when it finds a severe issue, such as an insecure storage type, so a configuration that starts is one that has already been vetted.

Preserving the BouncyCastle FIPS flags

JAVA_TOOL_OPTIONS puts the BouncyCastle FIPS modules on the JVM module path and selects the FIPS truststore type. java -jar gives the JVM no classpath of its own, so if you override this variable, preserve both flags — otherwise the JVM starts with no usable security provider:

JAVA_TOOL_OPTIONS=--module-path=/usr/share/java/bouncycastle-fips -Djavax.net.ssl.trustStoreType=FIPS

Serving TLS from a BCFKS keystore

Keystores and truststores must be in BCFKS format, which only the BouncyCastle FIPS provider can read. Pick a store password first — keytool requires at least 6 characters and will fail with Key password must be at least 6 characters otherwise — then create the keystore with the keytool shipped in the image:

export KEYSTORE_PASSWORD='replace-with-a-strong-password'

docker run --rm -v "$PWD/tls:/tls" --entrypoint keytool \
  cgr.dev/ORGANIZATION/apache-polaris-fips:latest \
  -keystore /tls/keystore.bcfks -storetype BCFKS -providername BCFIPS \
  -alias polaris -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA256withRSA \
  -dname CN=localhost -storepass "$KEYSTORE_PASSWORD" -keypass "$KEYSTORE_PASSWORD"

Then point Polaris' HTTPS listener at it:

# /deployments/config/application.properties
quarkus.http.ssl-port=8443
quarkus.http.ssl.certificate.key-store-file=/tls/keystore.bcfks
quarkus.http.ssl.certificate.key-store-file-type=BCFKS
quarkus.http.ssl.certificate.key-store-password=...

Documentation and Resources

What are Chainguard Containers?

Chainguard's free tier of Starter container images are built with Wolfi, our minimal Linux undistro.

All other Chainguard Containers are built with Chainguard OS, Chainguard's minimal Linux operating system designed to produce container images that meet the requirements of a more secure software supply chain.

The main features of Chainguard Containers include:

For cases where you need container images with shells and package managers to build or debug, most Chainguard Containers come paired with a development, or -dev, variant.

In all other cases, including Chainguard Containers tagged as :latest or with a specific version number, the container images include only an open-source application and its runtime dependencies. These minimal container images typically do not contain a shell or package manager.

Although the -dev container image variants have similar security features as their more minimal versions, they include additional software that is typically not necessary in production environments. We recommend using multi-stage builds to copy artifacts from the -dev variant into a more minimal production image.

Need additional packages?

To improve security, Chainguard Containers include only essential dependencies. Need more packages? Chainguard customers can use Custom Assembly to add packages, either through the Console, chainctl, or API.

To use Custom Assembly in the Chainguard Console: navigate to the image you'd like to customize in your Organization's list of images, and click on the Customize image button at the top of the page.

Learn More

Refer to our Chainguard Containers documentation on Chainguard Academy. Chainguard also offers VMs and Librariescontact us for access.

Trademarks

This software listing is packaged by Chainguard. The trademarks set forth in this offering are owned by their respective companies, and use of them does not imply any affiliation, sponsorship, or endorsement by such companies.

Licenses

Chainguard's container images contain software packages that are direct or transitive dependencies. The following licenses were found in the "latest" tag of this image:

  • Apache-2.0

  • BSD-3-Clause

  • Bitstream-Vera

  • Classpath-exception-2.0

  • FTL

  • GCC-exception-3.1

  • GPL-2.0

For a complete list of licenses, please refer to this Image's SBOM.

Software license agreement

Compliance

Chainguard Containers are SLSA Level 3 compliant with detailed metadata and documentation about how it was built. We generate build provenance and a Software Bill of Materials (SBOM) for each release, with complete visibility into the software supply chain.

SLSA compliance at Chainguard

This image helps reduce time and effort in establishing PCI DSS 4.0 compliance with low-to-no CVEs.

PCI DSS at Chainguard

This is a FIPS validated image for FedRAMP compliance.

This image is STIG hardened and scanned against the DISA General Purpose Operating System SRG with reports available.

Learn more about STIGsGet started with STIGs

Related images
apache-polaris logo

apache-polaris


Category
FIPS
STIG

The trusted source for open source

Talk to an expert
PrivacyTerms

Product

Chainguard ContainersChainguard LibrariesChainguard VMsChainguard OS PackagesChainguard ActionsChainguard Agent SkillsIntegrationsPricing
© 2026 Chainguard, Inc. All Rights Reserved.
Chainguard® and the Chainguard logo are registered trademarks of Chainguard, Inc. in the United States and/or other countries.
The other respective trademarks mentioned on this page are owned by the respective companies and use of them does not imply any affiliation or endorsement.