Ping Identity Devops

Ping Identity DevOps Docker Image - pingauthorizepap

This docker image includes the Ping Identity PingAuthorize Policy Editor product binaries and associated hook scripts to create and run a PingAuthorize Policy Editor instance.

Environment Variables

The following environment ENV variables can be used with this image.

ENV Variable Default Description

BASE

${BASE:-/opt}

ROOT_USER

administrator

the default administrative user for PingData

JAVA_HOME

/opt/java

STAGING_DIR

${BASE}/staging

Path to the staging area where the remote and local server profiles can be merged

OUT_DIR

${BASE}/out

Path to the runtime volume

SERVER_ROOT_DIR

${OUT_DIR}/instance

Path from which the runtime executes

IN_DIR

${BASE}/in

Location of a local server-profile volume

SERVER_BITS_DIR

${BASE}/server

Path to the server bits

BAK_DIR

${BASE}/backup

Path to a volume generically used to export or backup data

LOGS_DIR

${BASE}/logs

Path to a volume generically used for logging

STAGING_MANIFEST

${BASE}/staging-manifest.txt

Path to a manifest of files expected in the staging dir on first image startup

CLEAN_STAGING_DIR

false

Whether to clean the staging dir when the container starts

SECRETS_DIR

/run/secrets

Default path to the secrets

TOPOLOGY_FILE

${STAGING_DIR}/topology.json

Path to the topology file

HOOKS_DIR

${STAGING_DIR}/hooks

Path where all the hooks scripts are stored

CONTAINER_ENV

${STAGING_DIR}/.env

Environment Property file use to share variables between scripts in container

SERVER_PROFILE_DIR

/tmp/server-profile

Path where the remote server profile is checked out or cloned before being staged prior to being applied on the runtime

SERVER_PROFILE_URL

A valid git HTTPS URL (not ssh)

SERVER_PROFILE_URL_REDACT

true

When set to "true", the server profile git URL will not be printed to container output.

SERVER_PROFILE_BRANCH

A valid git branch (optional)

SERVER_PROFILE_PATH

The subdirectory in the git repo

SERVER_PROFILE_UPDATE

false

Whether to update the server profile upon container restart

SECURITY_CHECKS_STRICT

false

Requires strict checks on security

SECURITY_CHECKS_FILENAME

*.jwk *.pin

Perform a check for filenames that may violate security (i.e. secret material)

UNSAFE_CONTINUE_ON_ERROR

If this is set to true, then the container will provide a hard warning and continue.

LICENSE_DIR

${SERVER_ROOT_DIR}

License directory

PD_LICENSE_DIR

${STAGING_DIR}/pd.profile/server-root/pre-setup

PD License directory. Separating from above LICENSE_DIR to differentiate for different products

STARTUP_FOREGROUND_OPTS

The command-line options to provide to the startup command when the container starts with the server in the foreground. This is the normal start flow for the container

STARTUP_BACKGROUND_OPTS

The command-line options to provide to the startup command when the container starts with the server in the background. This is the debug start flow for the container

PING_IDENTITY_DEVOPS_KEY_REDACT

true

PING_IDENTITY_ACCEPT_EULA

NO

Legal requirement to explicitly accept the terms of the PingIdentity License Must be set to 'YES' for the container to start

PING_IDENTITY_DEVOPS_FILE

devops-secret

File name for devops-creds passed as a Docker secret

TAIL_LOG_FILES

A whitespace separated list of log files to tail to the container standard output - DO NOT USE WILDCARDS like /path/to/logs/*.log

COLORIZE_LOGS

true

If 'true', the output logs will be colorized with GREENs and REDs, otherwise, no colorization will be done. This is good for tools that monitor logs and colorization gets in the way.

LOCATION

Docker

Location default value

LOCATION_VALIDATION

true

Validation toggle for LOCATION: true to require any string denoting a logical/physical location, false to disable the check

MAX_HEAP_SIZE

384m

Heap size (for java products)

JVM_TUNING

AGGRESSIVE

JAVA_RAM_PERCENTAGE

75.0

Percentage of the container memory to allocate to the JVM DO NOT set to 100% or your JVM will exit with OutOfMemory errors and the container will terminate

VERBOSE

false

Triggers verbose messages in scripts using the set -x option.

PING_DEBUG

false

Set the server in debug mode, with increased output

PING_PRODUCT

The name of Ping product, i.e. PingFederate, PingDirectory - must be a valid Ping product type. This variable should be overridden by child images.

PING_PRODUCT_VALIDATION

true

Validation toggle for PING_PRODUCT: true to require a valid Ping product type (e.g. PingFederate,PingDirectory), false to disable the check

ADDITIONAL_SETUP_ARGS

List of setup arguments passed to Ping Data setup-arguments.txt file

LDAP_PORT

1389

Port over which to communicate for LDAP

LDAPS_PORT

1636

Port over which to communicate for LDAPS

HTTPS_PORT

1443

Port over which to communicate for HTTPS

JMX_PORT

1689

Port for monitoring over JMX protocol

ORCHESTRATION_TYPE

The type of orchestration tool used to run the container, normally set in the deployment (.yaml) file. Expected values include: - compose - swarm - kubernetes Defaults to blank (i.e. No type is set)

USER_BASE_DN

dc=example,dc=com

Base DN for user data

DOLLAR

'$'

Variable with a literal value of '$', to avoid unwanted variable substitution

PD_ENGINE_PUBLIC_HOSTNAME

localhost

PD (PingDirectory) public hostname that may be used in redirects

PD_ENGINE_PRIVATE_HOSTNAME

pingdirectory

PD (PingDirectory) private hostname

PDP_ENGINE_PUBLIC_HOSTNAME

localhost

PDP (PingDirectoryProxy) public hostname that may be used in redirects

PDP_ENGINE_PRIVATE_HOSTNAME

pingdirectoryproxy

PDP (PingDirectoryProxy) private hostname

PDS_ENGINE_PUBLIC_HOSTNAME

localhost

PDS (PingDataSync) public hostname that may be used in redirects

PDS_ENGINE_PRIVATE_HOSTNAME

pingdatasync

PDS (PingDataSync) private hostname

PAZ_ENGINE_PUBLIC_HOSTNAME

localhost

PAZ (PingAuthorize) public hostname that may be used in redirects

PAZ_ENGINE_PRIVATE_HOSTNAME

pingauthorize

PAZ (PingAuthorize) private hostname

PAZP_ENGINE_PUBLIC_HOSTNAME

localhost

PAZP (PingAuthorize-PAP) public hostname that may be used in redirects

PAZP_ENGINE_PRIVATE_HOSTNAME

pingauthorizepap

PAZP (PingAuthorize-PAP) private hostname

PF_ENGINE_PUBLIC_HOSTNAME

localhost

PF (PingFederate) engine public hostname that may be used in redirects

PF_ENGINE_PRIVATE_HOSTNAME

pingfederate

PF (PingFederate) engine private hostname

PF_ADMIN_PUBLIC_BASEURL

https://localhost:9999

PF (PingFederate) admin public baseurl that may be used in redirects. PF_RUN_PF_ADMIN_BASEURL will override this value for PingFederate 11.3 and later.

PF_ADMIN_PUBLIC_HOSTNAME

localhost

PF (PingFederate) admin public hostname that may be used in redirects. PF_RUN_PF_ADMIN_HOSTNAME will override this value for PingFederate 11.3 and later.

PF_ADMIN_PRIVATE_HOSTNAME

pingfederate-admin

PF (PingFederate) admin private hostname

PA_ENGINE_PUBLIC_HOSTNAME

localhost

PA (PingAccess) engine public hostname that may be used in redirects

PA_ENGINE_PRIVATE_HOSTNAME

pingaccess

PA (PingAccess) engine private hostname

PA_ADMIN_PUBLIC_HOSTNAME

localhost

PA (PingAccess) admin public hostname that may be used in redirects

PA_ADMIN_PRIVATE_HOSTNAME

pingaccess-admin

PA (PingAccess) admin private hostname

ROOT_USER_DN

cn=${ROOT_USER}

DN of the server root user

ENV

${BASE}/.profile

PS1

\${PING_PRODUCT}:\h:\w\n>

Default shell prompt (i.e. productName:hostname:workingDir)

REGENERATE_JAVA_PROPERTIES

false

Whether to force a run of dsjavaproperties --initialize (false = only regenerate java.properties when the JVM or JVM options change)

PATH

${JAVA_HOME}/bin:${BASE}:${SERVER_ROOT_DIR}/bin:${PATH}

PATH used by the container

IMAGE_VERSION

${IMAGE_VERSION}

IMAGE_GIT_REV

${IMAGE_GIT_REV}

DATE

${DATE}

PING_PRODUCT_VERSION

${VERSION}

PING_PRODUCT

PingAuthorize-PAP

Ping product name

LICENSE_DIR

${PD_LICENSE_DIR}

PD License directory (staged PingData profile pre-setup, where the PD license is placed by the staging hooks)

LICENSE_FILE_NAME

PingAuthorize.lic

Name of license File

LICENSE_SHORT_NAME

PingAuthorize

Short name used when retrieving license from License Server

LICENSE_VERSION

${LICENSE_VERSION}

Version used when retrieving license from License Server

MAX_HEAP_SIZE

384m

Minimal Heap size required for PingAuthorize Policy Editor

STARTUP_COMMAND

${SERVER_ROOT_DIR}/bin/start-server

The command that the entrypoint executes in the foreground to instantiate the container

STARTUP_FOREGROUND_OPTS

--nodetach

The command-line options to provide to the startup command when the container starts with the server in the foreground. This is the normal start flow for the container

STARTUP_BACKGROUND_OPTS

The command-line options to provide to the startup command when the container starts with the server in the background. This is the debug start flow for the container

KEYSTORE_FILE

Location of the keystore file containing the server certificate. If left undefined, the SECRETS_DIR will be checked for a keystore. If that keystore does not exist, the server will generate a self-signed certificate.

KEYSTORE_PIN_FILE

Location of the pin file for the keystore defined in KEYSTORE_FILE. You must specify a KEYSTORE_PIN_FILE when a KEYSTORE_FILE is present. This value does not need to be defined when allowing the server to generate a self-signed certificate.

KEYSTORE_TYPE

Format of the keystore defined in KEYSTORE_FILE. One of "jks" or "pkcs12". If not defined, the keystore format will be inferred based on the file extension of the KEYSTORE_FILE, defaulting to "jks".

TAIL_LOG_FILES

${SERVER_ROOT_DIR}/logs/authorize-pe.log ${SERVER_ROOT_DIR}/logs/management-audit.log ${SERVER_ROOT_DIR}/logs/policy-db.log ${SERVER_ROOT_DIR}/logs/setup.log ${SERVER_ROOT_DIR}/logs/start-server.log ${SERVER_ROOT_DIR}/logs/stop-server.log

Files tailed once container has started

REST_API_HOSTNAME

localhost

Hostname used for the REST API (deprecated, use PING_EXTERNAL_BASE_URL instead)

DECISION_POINT_SHARED_SECRET

2FederateM0re

Defines the shared secret between PAZ and the Policy Editor

PING_ENABLE_API_HTTP_CACHE

true

When set to false, disables the default HTTP API caching in the Policy Manager, Trust Framework, and Test Suite

PING_POLICY_DB_SYNC

When set to true, the container uses the provided policy database admin credentials to either create a PostgreSQL policy database or upgrade it if it already exists. You must also provide the PING_DB_CONNECTION_STRING, PING_DB_ADMIN_USERNAME, PING_DB_ADMIN_PASSWORD PING_DB_APP_USERNAME, and PING_DB_APP_PASSWORD variables for this to work.

PING_DB_CONNECTION_STRING

jdbc:h2:file:./Symphonic;ALIAS_COLUMN_NAME=TRUE

The JDBC connection string used to connect to the policy database. Use the format jdbc:postgresql://<host>:<port>/<database>. Only H2 embedded files and PostgreSQL are supported.

PING_DB_ADMIN_USERNAME

sa

The database administration username to use when creating or upgrading a policy database.

PING_DB_ADMIN_PASSWORD

Passw0rd

The database administration password to use when creating or upgrading a policy database.

PING_DB_APP_USERNAME

pap_user

The username that the Policy Editor should use when accessing the policy database during server runtime.

PING_DB_APP_PASSWORD

Symphonic2014!

The password that the Policy Editor should use when accessing the policy database during server runtime.

Ports Exposed

The following ports are exposed from the container. If a variable is used, then it may come from a parent container

  • ${HTTPS_PORT}

Running a PingAuthorize Policy Editor container

A PingAuthorize Policy Editor may be set up in one of two modes:

  • Demo mode: Uses insecure username/password authentication.

  • OIDC mode: Uses an OpenID Connect provider for authentication.

To run a PingAuthorize Policy Editor container in demo mode:

  docker run \
           --name pingauthorizepap \
           --env PING_EXTERNAL_BASE_URL=my-pap-hostname:8443 \
           --publish 8443:1443 \
           --detach \
           --env PING_IDENTITY_ACCEPT_EULA=YES \
           --env PING_IDENTITY_DEVOPS_USER \
           --env PING_IDENTITY_DEVOPS_KEY \
           --tmpfs /run/secrets \
           pingidentity/pingauthorizepap:edge

Log in with:

  • https://my-pap-hostname:8443/

  • Username: admin

  • Password: password123

To run a PingAuthorize Policy Editor container in OpenID Connect mode, specify the PING_OIDC_CONFIGURATION_ENDPOINT and PING_CLIENT_ID environment variables. To provide scopes other than the default (oidc email profile), specify the PING_SCOPE environment variable:

  docker run \
           --name pingauthorizepap \
           --env PING_EXTERNAL_BASE_URL=my-pe-hostname:8443 \
           --env PING_OIDC_CONFIGURATION_ENDPOINT=https://my-oidc-provider/.well-known/openid-configuration \
           --env PING_CLIENT_ID=b1929abc-e108-4b4f-83d467059fa1 \
           --env PING_SCOPE="oidc email profile phone" \
           --publish 8443:1443 \
           --detach \
           --env PING_IDENTITY_ACCEPT_EULA=YES \
           --env PING_IDENTITY_DEVOPS_USER \
           --env PING_IDENTITY_DEVOPS_KEY \
           --tmpfs /run/secrets \
           pingidentity/pingauthorizepap:edge

Note: If both PING_OIDC_CONFIGURATION_ENDPOINT and PING_CLIENT_ID are not specified, then Docker sets up the PingAuthorize Policy Editor container in demo mode.

Log in with:

  • https://my-pap-hostname:8443/

  • Provide credentials as prompted by the OIDC provider

Follow Docker logs with:

docker logs -f pingauthorizepap

Specifying the external hostname and port

The Policy Editor consists of a client-side application that runs in the user’s web browser and a backend REST API service that runs within the container. So that the client-side application can successfully make API calls to the backend, the Policy Editor must be configured with an externally accessible hostname:port. If the Policy Editor is configured in OIDC mode, then the external hostname:port pair is also needed so that the Policy Editor can correctly generate its OIDC redirect URI.

Use the PING_EXTERNAL_BASE_URL environment variable to specify the Policy Editor’s external hostname and port using the form hostname[:port], where hostname is the hostname of the Docker host and port is the Policy Editor container’s published port. If the published port is 443, then it should be omitted.

For example:

  docker run \
           --name pingauthorizepap \
           --env PING_EXTERNAL_BASE_URL=my-pap-hostname:8443 \
           --publish 8443:1443 \
           --detach \
           --env PING_IDENTITY_ACCEPT_EULA=YES \
           --env PING_IDENTITY_DEVOPS_USER \
           --env PING_IDENTITY_DEVOPS_KEY \
           --tmpfs /run/secrets \
           pingidentity/pingauthorizepap:edge

Changing the default periodic database backup schedule and location

The PAP performs periodic backups of the policy database. The results are placed in the policy-backup directory underneath the instance root.

Use the PING_BACKUP_SCHEDULE environment variable to specify the PAP’s periodic database backup schedule in the form of a cron expression. The cron expression evaluates against the container timezone, UTC. Use the PING_H2_BACKUP_DIR environment variable to change the backup output directory.

For example, to perform backups daily at UTC noon and place backups in /opt/out/backup:

  docker run \
           --name pingauthorizepap \
           --env PING_EXTERNAL_BASE_URL=my-pap-hostname:8443 \
           --env PING_BACKUP_SCHEDULE="0 0 12 * * ?" \
           --env PING_H2_BACKUP_DIR=/opt/out/backup \
           --publish 8443:1443 \
           --detach \
           --env PING_IDENTITY_ACCEPT_EULA=YES \
           --env PING_IDENTITY_DEVOPS_USER \
           --env PING_IDENTITY_DEVOPS_KEY \
           --tmpfs /run/secrets \
           pingidentity/pingauthorizepap:edge

Creating and upgrading a PostgreSQL policy database

Although the Policy Editor uses an embedded H2 file for its policy database implementation by default, it also has the capability to use a PostgreSQL database. However, this database must first be initialized with database objects.

Set the PING_POLICY_DB_SYNC environment variable to true, provide the PostgreSQL JDBC connection string in PING_DB_CONNECTION_STRING, the database administration credentials through PING_DB_ADMIN_USERNAME and PING_DB_ADMIN_PASSWORD, and the server runtime credentials through PING_DB_APP_USERNAME and PING_DB_APP_PASSWORD to indicate that pingauthorizepap should create the necessary policy database objects.

Similarly, use the same environment variables with the same values when a new version of the application is released. pingauthorizepap will use the database administration user to perform any necessary upgrades to the database objects.

In both scenarios, the database administration user and the server runtime user must exist and be able to sign into the PostgreSQL server. In the create scenario, the database administration user must be able to create databases. In the upgrade scenario, the database administration user must own the database objects. Therefore, it is advisable to continually provide the same administration credentials during creation and upgrades to prevent permissions issues.

For example, assume that a system administrator has created a PostgreSQL username pap_admin that can sign into a PostgreSQL server hosted at example.com and listening on port 5432. They have also created the runtime user pap_user.

To create the database objects under the database named my_pap_db and start the Policy Editor, use the following command:

  docker run \
           --name pingauthorizepap \
           --env PING_EXTERNAL_BASE_URL=my-pap-hostname:8443 \
           --env PING_POLICY_DB_SYNC=true \
           --env PING_DB_CONNECTION_STRING=jdbc:postgresql://example.com:5432/my_pap_db \
           --env PING_DB_ADMIN_USERNAME=pap_admin \
           --env PING_DB_ADMIN_PASSWORD=2FederateM0re \
           --env PING_DB_APP_USERNAME=pap_user \
           --env PING_DB_APP_PASSWORD=2FederateM0re \
           --publish 8443:1443 \
           --detach \
           --env PING_IDENTITY_ACCEPT_EULA=YES \
           --env PING_IDENTITY_DEVOPS_USER \
           --env PING_IDENTITY_DEVOPS_KEY \
           --tmpfs /run/secrets \
           pingidentity/pingauthorizepap:edge

Use the same command when a new pingauthorizepap release requires an upgrade to the policy database schema.

Note that PING_DB_ADMIN_PASSWORD and PING_DB_APP_PASSWORD are only provided on the command line for illustrative purposes and can instead be provided through a Vault or through a /run/secrets .env file.

Docker Container Hook Scripts

Please go here for details on all pingauthorizepap hook scripts


This document is auto-generated from pingauthorizepap/Dockerfile

Copyright © 2026 Ping Identity Corporation