diff --git a/bitnami/pgbouncer/1/debian-12/Dockerfile b/bitnami/pgbouncer/1/debian-12/Dockerfile index bf0119df7db6..ff105234328d 100644 --- a/bitnami/pgbouncer/1/debian-12/Dockerfile +++ b/bitnami/pgbouncer/1/debian-12/Dockerfile @@ -7,7 +7,7 @@ ARG DOWNLOADS_URL="downloads.bitnami.com/files/stacksmith" ARG TARGETARCH LABEL org.opencontainers.image.base.name="docker.io/bitnami/minideb:bookworm" \ - org.opencontainers.image.created="2026-02-19T03:44:07Z" \ + org.opencontainers.image.created="2026-03-12T12:47:31Z" \ org.opencontainers.image.description="Application packaged by Broadcom, Inc." \ org.opencontainers.image.documentation="https://github.com/bitnami/containers/tree/main/bitnami/pgbouncer/README.md" \ org.opencontainers.image.source="https://github.com/bitnami/containers/tree/main/bitnami/pgbouncer" \ @@ -29,9 +29,9 @@ RUN --mount=type=secret,id=downloads_url,env=SECRET_DOWNLOADS_URL \ mkdir -p /tmp/bitnami/pkg/cache/ ; cd /tmp/bitnami/pkg/cache/ || exit 1 ; \ COMPONENTS=( \ "nss-wrapper-1.1.16-0-linux-${OS_ARCH}-debian-12" \ - "wait-for-port-1.0.10-7-linux-${OS_ARCH}-debian-12" \ - "postgresql-client-14.21.0-0-linux-${OS_ARCH}-debian-12" \ - "ini-file-1.4.9-7-linux-${OS_ARCH}-debian-12" \ + "wait-for-port-1.0.10-8-linux-${OS_ARCH}-debian-12" \ + "postgresql-client-14.22.0-0-linux-${OS_ARCH}-debian-12" \ + "ini-file-1.4.9-8-linux-${OS_ARCH}-debian-12" \ "pgbouncer-1.25.1-0-linux-${OS_ARCH}-debian-12" \ ) ; \ for COMPONENT in "${COMPONENTS[@]}"; do \ @@ -57,9 +57,10 @@ COPY rootfs / RUN /opt/bitnami/scripts/pgbouncer/postunpack.sh ENV APP_VERSION="1.25.1" \ BITNAMI_APP_NAME="pgbouncer" \ - IMAGE_REVISION="5" \ + IMAGE_REVISION="6" \ LANG="en_US.UTF-8" \ LANGUAGE="en_US:en" \ + LD_LIBRARY_PATH="/opt/bitnami/postgresql/lib:$LD_LIBRARY_PATH" \ NSS_WRAPPER_LIB="/opt/bitnami/common/lib/libnss_wrapper.so" \ PATH="/opt/bitnami/common/bin:/opt/bitnami/postgresql/bin:/opt/bitnami/pgbouncer/bin:$PATH" diff --git a/bitnami/pgbouncer/1/debian-12/rootfs/opt/bitnami/scripts/libpostgresqlclient.sh b/bitnami/pgbouncer/1/debian-12/rootfs/opt/bitnami/scripts/libpostgresqlclient.sh new file mode 100644 index 000000000000..65238dfff60b --- /dev/null +++ b/bitnami/pgbouncer/1/debian-12/rootfs/opt/bitnami/scripts/libpostgresqlclient.sh @@ -0,0 +1,424 @@ +#!/bin/bash +# Copyright Broadcom, Inc. All Rights Reserved. +# SPDX-License-Identifier: APACHE-2.0 +# +# Bitnami PostgreSQL Client library + +# shellcheck disable=SC1091 + +# Load Generic Libraries +. /opt/bitnami/scripts/liblog.sh +. /opt/bitnami/scripts/libos.sh +. /opt/bitnami/scripts/libvalidations.sh + +######################## +# Validate settings in POSTGRESQL_CLIENT_* environment variables +# Globals: +# POSTGRESQL_CLIENT_* +# Arguments: +# None +# Returns: +# None +######################### +postgresql_client_validate() { + info "Validating settings in POSTGRESQL_CLIENT_* env vars" + local error_code=0 + + # Auxiliary functions + print_validation_error() { + error "$1" + error_code=1 + } + + empty_password_enabled_warn() { + warn "You set the environment variable ALLOW_EMPTY_PASSWORD=${ALLOW_EMPTY_PASSWORD}. For safety reasons, do not use this flag in a production environment." + } + empty_password_error() { + print_validation_error "The $1 environment variable is empty or not set. Set the environment variable ALLOW_EMPTY_PASSWORD=yes to allow the container to be started with blank passwords. This is recommended only for development." + } + + # Only validate environment variables if any action needs to be performed + local -a database_names + read -r -a database_names <<< "$(tr ',;' ' ' <<< "$POSTGRESQL_CLIENT_CREATE_DATABASE_NAMES")" + if [[ -n "$POSTGRESQL_CLIENT_CREATE_DATABASE_USERNAME" || "${#database_names[@]}" -gt 0 ]]; then + if is_boolean_yes "$ALLOW_EMPTY_PASSWORD"; then + empty_password_enabled_warn + else + if [[ -z "$POSTGRESQL_CLIENT_POSTGRES_PASSWORD" ]]; then + empty_password_error "POSTGRESQL_CLIENT_POSTGRES_PASSWORD" + fi + if [[ -n "$POSTGRESQL_CLIENT_CREATE_DATABASE_USERNAME" ]] && [[ -z "$POSTGRESQL_CLIENT_CREATE_DATABASE_PASSWORD" ]]; then + empty_password_error "POSTGRESQL_CLIENT_CREATE_DATABASE_PASSWORD" + fi + fi + fi + # When enabling extensions, the DB name must be provided + local -a extensions + read -r -a extensions <<< "$(tr ',;' ' ' <<< "$POSTGRESQL_CLIENT_CREATE_DATABASE_EXTENSIONS")" + if [[ "${#database_names[@]}" -le 0 && "${#extensions[@]}" -gt 0 ]]; then + print_validation_error "POSTGRESQL_CLIENT_CREATE_DATABASE_EXTENSIONS requires POSTGRESQL_CLIENT_CREATE_DATABASE_NAMES to be set." + fi + return "$error_code" +} + +######################## +# Perform actions to a database +# Globals: +# POSTGRESQL_CLIENT_* +# Arguments: +# None +# Returns: +# None +######################### +postgresql_client_initialize() { + local -a database_names + read -r -a database_names <<< "$(tr ',;' ' ' <<< "$POSTGRESQL_CLIENT_CREATE_DATABASE_NAMES")" + # Wait for the database to be accessible if any action needs to be performed + if [[ -n "$POSTGRESQL_CLIENT_CREATE_DATABASE_USERNAME" || "${#database_names[@]}" -gt 0 ]]; then + info "Trying to connect to the database server" + check_postgresql_connection() { + echo "SELECT 1" | postgresql_remote_execute "$POSTGRESQL_CLIENT_DATABASE_HOST" "$POSTGRESQL_CLIENT_DATABASE_PORT_NUMBER" "postgres" "$POSTGRESQL_CLIENT_POSTGRES_USER" "$POSTGRESQL_CLIENT_POSTGRES_PASSWORD" + } + if ! retry_while "check_postgresql_connection"; then + error "Could not connect to the database server" + return 1 + fi + fi + # Ensure a database user exists in the server + if [[ -n "$POSTGRESQL_CLIENT_CREATE_DATABASE_USERNAME" ]]; then + info "Creating database user ${POSTGRESQL_CLIENT_CREATE_DATABASE_USERNAME}" + local -a args=("$POSTGRESQL_CLIENT_CREATE_DATABASE_USERNAME" "--host" "$POSTGRESQL_CLIENT_DATABASE_HOST" "--port" "$POSTGRESQL_CLIENT_DATABASE_PORT_NUMBER") + [[ -n "$POSTGRESQL_CLIENT_CREATE_DATABASE_PASSWORD" ]] && args+=("-p" "$POSTGRESQL_CLIENT_CREATE_DATABASE_PASSWORD") + postgresql_ensure_user_exists "${args[@]}" + fi + # Ensure a database exists in the server (and that the user has write privileges, if specified) + if [[ "${#database_names[@]}" -gt 0 ]]; then + local -a createdb_args extensions + read -r -a extensions <<< "$(tr ',;' ' ' <<< "$POSTGRESQL_CLIENT_CREATE_DATABASE_EXTENSIONS")" + for database_name in "${database_names[@]}"; do + info "Creating database ${database_name}" + createdb_args=("$database_name" "--host" "$POSTGRESQL_CLIENT_DATABASE_HOST" "--port" "$POSTGRESQL_CLIENT_DATABASE_PORT_NUMBER") + [[ -n "$POSTGRESQL_CLIENT_CREATE_DATABASE_USERNAME" ]] && createdb_args+=("-u" "$POSTGRESQL_CLIENT_CREATE_DATABASE_USERNAME") + postgresql_ensure_database_exists "${createdb_args[@]}" + # Ensure the list of extensions are enabled in the specified database + if [[ "${#extensions[@]}" -gt 0 ]]; then + for extension_to_create in "${extensions[@]}"; do + echo "CREATE EXTENSION IF NOT EXISTS ${extension_to_create}" | postgresql_remote_execute "$POSTGRESQL_CLIENT_DATABASE_HOST" "$POSTGRESQL_CLIENT_DATABASE_PORT_NUMBER" "$database_name" "$POSTGRESQL_CLIENT_POSTGRES_USER" "$POSTGRESQL_CLIENT_POSTGRES_PASSWORD" + done + fi + done + fi + # Execute a custom SQL script + if [[ -n "$POSTGRESQL_CLIENT_EXECUTE_SQL" ]]; then + info "Executing custom SQL script" + echo "$POSTGRESQL_CLIENT_EXECUTE_SQL" | postgresql_remote_execute "$POSTGRESQL_CLIENT_DATABASE_HOST" "$POSTGRESQL_CLIENT_DATABASE_PORT_NUMBER" "postgres" "$POSTGRESQL_CLIENT_POSTGRES_USER" "$POSTGRESQL_CLIENT_POSTGRES_PASSWORD" + fi + # Avoid exit code of previous commands to affect the result of this function + true +} + +# Copyright Broadcom, Inc. All Rights Reserved. +# SPDX-License-Identifier: APACHE-2.0 + +# shellcheck disable=SC2148 + +######################## +# Return PostgreSQL major version +# Globals: +# POSTGRESQL_* +# Arguments: +# None +# Returns: +# String +######################### +postgresql_get_major_version() { + psql --version | grep -oE "[0-9]+\.[0-9]+" | grep -oE "^[0-9]+" +} + +######################## +# Gets an environment variable name based on the suffix +# Arguments: +# $1 - environment variable suffix +# Returns: +# environment variable name +######################### +get_env_var_value() { + local env_var_suffix="${1:?missing suffix}" + local env_var_name + for env_var_prefix in POSTGRESQL POSTGRESQL_CLIENT; do + env_var_name="${env_var_prefix}_${env_var_suffix}" + if [[ -n "${!env_var_name:-}" ]]; then + echo "${!env_var_name}" + break + fi + done +} + +######################## +# Execute an arbitrary query/queries against the running PostgreSQL service and print the output +# Stdin: +# Query/queries to execute +# Globals: +# BITNAMI_DEBUG +# POSTGRESQL_* +# Arguments: +# $1 - Database where to run the queries +# $2 - User to run queries +# $3 - Password +# $4 - Extra options (eg. -tA) +# Returns: +# None +######################### +postgresql_execute_print_output() { + local -r db="${1:-}" + local -r user="${2:-postgres}" + local -r pass="${3:-}" + local opts + read -r -a opts <<<"${@:4}" + + local args=("-U" "$user" "-p" "${POSTGRESQL_PORT_NUMBER:-5432}" "-h" "127.0.0.1") + [[ -n "$db" ]] && args+=("-d" "$db") + [[ "${#opts[@]}" -gt 0 ]] && args+=("${opts[@]}") + + # Execute the Query/queries from stdin + PGPASSWORD=$pass psql "${args[@]}" +} + +######################## +# Execute an arbitrary query/queries against the running PostgreSQL service +# Stdin: +# Query/queries to execute +# Globals: +# BITNAMI_DEBUG +# POSTGRESQL_* +# Arguments: +# $1 - Database where to run the queries +# $2 - User to run queries +# $3 - Password +# $4 - Extra options (eg. -tA) +# Returns: +# None +######################### +postgresql_execute() { + if [[ "${BITNAMI_DEBUG:-false}" = true ]]; then + "postgresql_execute_print_output" "$@" + elif [[ "${NO_ERRORS:-false}" = true ]]; then + "postgresql_execute_print_output" "$@" 2>/dev/null + else + "postgresql_execute_print_output" "$@" >/dev/null 2>&1 + fi +} + +######################## +# Execute an arbitrary query/queries against a remote PostgreSQL service and print to stdout +# Stdin: +# Query/queries to execute +# Globals: +# BITNAMI_DEBUG +# DB_* +# Arguments: +# $1 - Remote PostgreSQL service hostname +# $2 - Remote PostgreSQL service port +# $3 - Database where to run the queries +# $4 - User to run queries +# $5 - Password +# $6 - Extra options (eg. -tA) +# Returns: +# None +postgresql_remote_execute_print_output() { + local -r hostname="${1:?hostname is required}" + local -r port="${2:?port is required}" + local -a args=("-h" "$hostname" "-p" "$port") + shift 2 + "postgresql_execute_print_output" "$@" "${args[@]}" +} + +######################## +# Execute an arbitrary query/queries against a remote PostgreSQL service +# Stdin: +# Query/queries to execute +# Globals: +# BITNAMI_DEBUG +# DB_* +# Arguments: +# $1 - Remote PostgreSQL service hostname +# $2 - Remote PostgreSQL service port +# $3 - Database where to run the queries +# $4 - User to run queries +# $5 - Password +# $6 - Extra options (eg. -tA) +# Returns: +# None +postgresql_remote_execute() { + if [[ "${BITNAMI_DEBUG:-false}" = true ]]; then + "postgresql_remote_execute_print_output" "$@" + elif [[ "${NO_ERRORS:-false}" = true ]]; then + "postgresql_remote_execute_print_output" "$@" 2>/dev/null + else + "postgresql_remote_execute_print_output" "$@" >/dev/null 2>&1 + fi +} + +######################## +# Optionally create the given database user +# Flags: +# -p|--password - database password +# --host - database host +# --port - database port +# Arguments: +# $1 - user +# Returns: +# None +######################### +postgresql_ensure_user_exists() { + local -r user="${1:?user is missing}" + local password="" + # For accessing an external database + local db_host="" + local db_port="" + + # Validate arguments + shift 1 + while [ "$#" -gt 0 ]; do + case "$1" in + -p | --password) + shift + password="${1:?missing password}" + ;; + --host) + shift + db_host="${1:?missing database host}" + ;; + --port) + shift + db_port="${1:?missing database port}" + ;; + *) + echo "Invalid command line flag $1" >&2 + return 1 + ;; + esac + shift + done + + local -a postgresql_execute_cmd=("postgresql_execute") + [[ -n "$db_host" && -n "$db_port" ]] && postgresql_execute_cmd=("postgresql_remote_execute" "$db_host" "$db_port") + local -a postgresql_execute_flags=("postgres" "$(get_env_var_value POSTGRES_USER)" "$(get_env_var_value POSTGRES_PASSWORD)") + + "${postgresql_execute_cmd[@]}" "${postgresql_execute_flags[@]}" <&2 + return 1 + ;; + esac + shift + done + + local -a postgresql_execute_cmd=("postgresql_execute") + [[ -n "$db_host" && -n "$db_port" ]] && postgresql_execute_cmd=("postgresql_remote_execute" "$db_host" "$db_port") + local -a postgresql_execute_flags=("postgres" "$(get_env_var_value POSTGRES_USER)" "$(get_env_var_value POSTGRES_PASSWORD)") + + "${postgresql_execute_cmd[@]}" "${postgresql_execute_flags[@]}" < PgBouncer is a connection pooler for PostgreSQL. It reduces performance overhead by rotating client connections to PostgreSQL databases. It supports PostgreSQL databases located on different hosts. [Overview of PgBouncer](https://www.pgbouncer.org/) @@ -62,10 +60,18 @@ cd bitnami/APP/VERSION/OPERATING-SYSTEM docker build -t bitnami/APP:latest . ``` +## Using `docker-compose.yaml` + +Please be aware this file has not undergone internal testing. Consequently, we advise its use exclusively for development or testing purposes. + ## Configuration +The following section describes the supported environment variables + ### Environment variables +The following tables list the main variables you can set. + #### Customizable environment variables | Name | Description | Default Value | @@ -183,24 +189,7 @@ To expose a ["fallback database" (wildcard that matches any)](https://www.pgboun ### Initializing a new instance -When the container is launched, it will execute the files with extension `.sh` located at `/docker-entrypoint-initdb.d`. - -In order to have your custom files inside the docker image you can mount them as a volume. - -```console -docker run --name pgbouncer \ - -v /path/to/init-scripts:/docker-entrypoint-initdb.d \ - bitnami/pgbouncer:latest -``` - -Or with docker-compose - -```yaml -pgbouncer: - image: bitnami/pgbouncer:latest - volumes: - - /path/to/init-scripts:/docker-entrypoint-initdb.d -``` +When the container is launched, it will execute the files with extension `.sh` located at `/docker-entrypoint-initdb.d`. In order to have your custom files inside the docker image you can mount them as a volume. ### Securing PgBouncer traffic @@ -219,103 +208,13 @@ PgBouncer supports the encryption of connections using the SSL/TLS protocol. Sho - `PGBOUNCER_SERVER_TLS_PROTOCOLS`: TLS protocols to be used in server connection. Defaults to `secure`. Check the [official PgBouncer documentation](https://www.pgbouncer.org/config.html) for the available values for `server_tls_protocols`. - `PGBOUNCER_SERVER_TLS_CIPHERS`: TLS ciphers to be used in server connection. Defaults to `fast`. Check the [official PgBouncer documentation](https://www.pgbouncer.org/config.html) for the available values for `server_tls_ciphers`. -When enabling TLS, PgBouncer will support both standard and encrypted traffic by default but prefer the latter. Below there are some examples of how to quickly set up client TLS traffic: - -1. Using `docker run` - - ```console - $ docker run \ - -v /path/to/certs:/opt/bitnami/pgbouncer/certs \ - -e PGBOUNCER_CLIENT_TLS_SSLMODE=require \ - -e PGBOUNCER_CLIENT_TLS_CERT_FILE=/opt/bitnami/pgbouncer/certs/pgbouncer.crt \ - -e PGBOUNCER_CLIENT_TLS_KEY_FILE=/opt/bitnami/pgbouncer/certs/pgbouncer.key \ - bitnami/pgbouncer:latest - ``` - -2. Modifying the `docker-compose.yml` file present in this repository: - - ```yaml - services: - pgbouncer: - ... - environment: - ... - - PGBOUNCER_CLIENT_TLS_SSLMODE=require - - PGBOUNCER_CLIENT_TLS_CERT_FILE=/opt/bitnami/pgbouncer/certs/pgbouncer.crt - - PGBOUNCER_CLIENT_TLS_KEY_FILE=/opt/bitnami/pgbouncer/certs/pgbouncer.key - ... - volumes: - ... - - /path/to/certs:/opt/bitnami/pgbouncer/certs - ... - ``` +When enabling TLS, PgBouncer will support both standard and encrypted traffic by default but prefer the latter. Alternatively, you may also provide this configuration in your [custom](https://github.com/bitnami/containers/blob/main/bitnami/pgbouncer#configuration-file) configuration file. ### Configuration file -The image looks for `pgbouncer.ini` file in `/opt/bitnami/pgbouncer/conf/`. You can mount a volume at `/bitnami/pgbouncer/conf/` and copy/edit the `pgbouncer.ini` file in the `/path/to/pgbouncer-persistence/conf/`. The default configurations will be populated to the `conf/` directory if it's empty. - -```console -/path/to/pgbouncer-persistence/conf/ -└── pgbouncer.ini - -0 directories, 1 file -``` - -As PgBouncer image is non-root, you need to set the proper permissions to the mounted directory in your host: - -```console -sudo chown 1001:1001 /path/to/pgbouncer-persistence/conf/ -``` - -#### Step 1: Run the PgBouncer image - -Run the PgBouncer image, mounting a directory from your host. - -```console -docker run --name pgbouncer \ - -v /path/to/pgbouncer-persistence/conf/:/bitnami/pgbouncer/conf/ \ - bitnami/pgbouncer:latest -``` - -or using Docker Compose: - -```yaml -version: '2' - -... - -services: - pgbouncer: - image: bitnami/pgbouncer:latest - ports: - - 6432:6432 - volumes: - - /path/to/pgbouncer-persistence/conf/:/bitnami/pgbouncer/conf/ -``` - -#### Step 2: Edit the configuration - -Edit the configuration on your host using your favorite editor. - -```console -vi /path/to/pgbouncer-persistence/conf/pgbouncer.ini -``` - -#### Step 3: Restart PgBouncer - -After changing the configuration, restart your PgBouncer container for changes to take effect. - -```console -docker restart pgbouncer -``` - -or using Docker Compose: - -```console -docker-compose restart pgbouncer -``` +The image looks for `pgbouncer.ini` file in `/opt/bitnami/pgbouncer/conf/`. You can mount a volume at `/bitnami/pgbouncer/conf/` and copy/edit the `pgbouncer.ini` file in the `/path/to/pgbouncer-persistence/conf/`. The default configuration will be populated to the `conf/` directory if it's empty. Refer to the [server configuration](https://www.pgbouncer.org/usage.html) manual for the complete list of configuration options. @@ -323,87 +222,13 @@ Refer to the [server configuration](https://www.pgbouncer.org/usage.html) manual It is possible to connect a single PgBouncer instance with multiple PostgreSQL backends. By using as many `PGBOUNCER_DSN_${i}` environment variables (with `i` starting at zero, `0`) as needed, and the `PGBOUNCER_USERLIST_FILE` variable pointing to a mounted volume with the required credentials for any extra PostgreSQL database in the format `"" ""`. -The PgBouncer initialization process requires one PostgreSQL backend to be configured using the different `POSTGRESQL_*` variables listed in the [Environment Variables](#environment-variables) section, but the rest of backends connections can be provided using the method explained in this section. An example `docker-compose.yaml` for this scenario can be found below - -```yaml - pg1: - image: docker.io/bitnami/postgresql:latest - volumes: - - pg1_data:/bitnami/postgresql - environment: - - POSTGRESQL_PASSWORD=password1 - - POSTGRESQL_DATABASE=db1 - - pg2: - image: docker.io/bitnami/postgresql:latest - volumes: - - pg2_data:/bitnami/postgresql - environment: - - POSTGRESQL_PASSWORD=password2 - - POSTGRESQL_DATABASE=db2 - - pg3: - image: docker.io/bitnami/postgresql:latest - volumes: - - pg3_data:/bitnami/postgresql - environment: - - POSTGRESQL_PASSWORD=password3 - - POSTGRESQL_DATABASE=db3 - - pgbouncer: - image: docker.io/bitnami/pgbouncer:latest - ports: - - 6432:6432 - volumes: - - ./userlists.txt:/bitnami/userlists.txt - environment: - - POSTGRESQL_HOST=pg1 - - POSTGRESQL_PASSWORD=password1 - - POSTGRESQL_DATABASE=db1 - - PGBOUNCER_AUTH_TYPE=trust - - PGBOUNCER_USERLIST_FILE=/bitnami/userlists.txt - - PGBOUNCER_DSN_0=pg1=host=pg1 port=5432 dbname=db1 - - PGBOUNCER_DSN_1=pg2=host=pg2 port=5432 dbname=db2 - - PGBOUNCER_DSN_2=pg3=host=pg3 port=5432 dbname=db3 -volumes: - pg1_data: - driver: local - pg2_data: - driver: local - pg3_data: - driver: local -``` - -And this is the content of the `userlists.txt` file: - -```text -"postgres" "password1" -"postgres" "password2" -"postgres" "password3" -``` - -Once initialized, the scenario above provides access to three diferent PostgreSQL backends from a single PgBouncer instance. As an example, you can request the PostgreSQL version of the backend server number two (notice it is the only running PostgreSQL 15.x in this scenario): - -```bash -$ docker exec -it -u root debian-12-pgbouncer-1 psql -p 6432 -U postgres pg2 -c "show server_version;" - server_version - ---------------- - 15.4 - (1 row) -``` - +The PgBouncer initialization process requires one PostgreSQL backend to be configured using the different `POSTGRESQL_*` variables listed in the [Environment Variables](#environment-variables) section, but the rest of backends connections can be provided using the method explained in this section. ### FIPS configuration in Bitnami Secure Images The Bitnami PgBouncer Docker image from the [Bitnami Secure Images](https://go-vmware.broadcom.com/contact-us) catalog includes extra features and settings to configure the container with FIPS capabilities. You can configure the next environment variables: - `OPENSSL_FIPS`: whether OpenSSL runs in FIPS mode or not. `yes` (default), `no`. -## Using `docker-compose.yaml` - -Please be aware this file has not undergone internal testing. Consequently, we advise its use exclusively for development or testing purposes. - -If you detect any issue in the `docker-compose.yaml` file, feel free to report it or contribute with a fix by following our [Contributing Guidelines](https://github.com/bitnami/containers/blob/main/CONTRIBUTING.md). - ## License Copyright © 2026 Broadcom. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.