packaged by Chainguard
Contact our team to test out this image for free. Please also indicate any other images you would like to evaluate.
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.
For those with access, this container image is available on cgr.dev:
Be sure to replace the ORGANIZATION placeholder with the name used for your organization's private repository within the Chainguard Registry.
Chainguard's apache-polaris-fips container image is comparable to the upstream apache/polaris image, with the following differences:
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.polaris user (uid 10000, gid 10001), matching upstream, so the Apache Polaris Helm chart works unmodified.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.
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.
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.
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:
Polaris serves its APIs on 8181 and its health and metrics endpoints on the management port 8182:
Request an OAuth2 token for the bootstrapped principal and call the management API with it:
Iceberg engines connect to the REST catalog at http://localhost:8181/api/catalog, using the catalog name as the warehouse.
The upstream chart works against this image; point it at your organization's repository:
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:
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.
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:
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:
Then point Polaris' HTTPS listener at it:
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.
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.
Refer to our Chainguard Containers documentation on Chainguard Academy. Chainguard also offers VMs and Libraries — contact us for access.
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.
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 agreementChainguard 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 ChainguardThis image helps reduce time and effort in establishing PCI DSS 4.0 compliance with low-to-no CVEs.
PCI DSS at ChainguardThis 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