Skip to content

Build RabbitMQ using Dockerfile

Purpose

This document provides instructions for building, tagging, pushing, and running the RabbitMQ Docker image. It also outlines the required file structure

File Structure

├── 10-defaults.conf
├── 20-management_agent.disable_metrics_collector.conf
├── Dockerfile
├── docker-entrypoint.sh

10-defaults.conf: default RabbitMQ configuration overrides.

## DEFAULT SETTINGS ARE NOT MEANT TO BE TAKEN STRAIGHT INTO PRODUCTION
## see https://www.rabbitmq.com/configure.html for further information
## on configuring RabbitMQ

## allow access to the guest user from anywhere on the network
## https://www.rabbitmq.com/access-control.html#loopback-users
## https://www.rabbitmq.com/production-checklist.html#users
loopback_users.guest = false

## Send all logs to stdout/TTY. Necessary to see logs when running via
## a container
log.console = true

20-management_agent.disable_metrics_collector.conf

# Enable Prometheus-style metrics by default (https://github.com/docker-library/rabbitmq/issues/419)
management_agent.disable_metrics_collector = true

Dockerfile

# syntax=docker/dockerfile:1
# check=skip=SecretsUsedInArgOrEnv
#
# NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh"
#
# PLEASE DO NOT EDIT IT DIRECTLY.
#

# vim:noet:
# Alpine Linux is not officially supported by the RabbitMQ team -- use at your own risk!
FROM alpine:3.23 AS build-base

RUN apk add --no-cache \
        build-base \
        dpkg-dev \
        dpkg \
        gnupg \
        libc-dev \
        linux-headers \
        ncurses-dev

FROM build-base AS openssl-builder

ARG BUILDKIT_SBOM_SCAN_STAGE=true

# Default to a PGP keyserver that pgp-happy-eyeballs recognizes, but allow for substitutions locally
ARG PGP_KEYSERVER=keyserver.ubuntu.com
# If you are building this image locally and are getting `gpg: keyserver receive failed: No data` errors,
# run the build with a different PGP_KEYSERVER, e.g. docker build --tag rabbitmq:4.2 --build-arg PGP_KEYSERVER=pgpkeys.eu 4.2/ubuntu
# For context, see https://github.com/docker-library/official-images/issues/4252

ENV OPENSSL_VERSION=3.5.6
ENV OPENSSL_SOURCE_SHA256="deae7c80cba99c4b4f940ecadb3c3338b13cb77418409238e57d7f31f2a3b736"
# https://www.openssl.org/source/
ENV OPENSSL_PGP_KEY_IDS="0xBA5473A2B0587B07FB27CF2D216094DFD0CB81EF"

ENV OTP_VERSION=27.3.4.11
# TODO add PGP checking when the feature will be added to Erlang/OTP's build system
# https://erlang.org/pipermail/erlang-questions/2019-January/097067.html
ENV OTP_SOURCE_SHA256="9d63382d3e7707c058dabe338114e09ff8228d54d29df794d907d3c8dddde5f9"

# install openssl & erlang to a path that isn't auto-checked for libs to prevent accidental use by system packages
ENV ERLANG_INSTALL_PATH_PREFIX=/opt/erlang
ENV OPENSSL_INSTALL_PATH_PREFIX=/opt/openssl

# Install dependencies required to build Erlang/OTP from source
# https://erlang.org/doc/installation_guide/INSTALL.html
# dpkg-dev: Required to set up host & build type when compiling Erlang/OTP
# gnupg: Required to verify OpenSSL artefacts
# libncurses5-dev: Required for Erlang/OTP new shell & observer_cli - https://github.com/zhongwencool/observer_cli
RUN set -eux; \
# /usr/local/src doesn't exist in Alpine by default
        mkdir -p /usr/local/src; \
        \
        OPENSSL_SOURCE_URL="https://github.com/openssl/openssl/releases/download/openssl-$OPENSSL_VERSION/openssl-$OPENSSL_VERSION.tar.gz"; \
        OPENSSL_PATH="/usr/local/src/openssl-$OPENSSL_VERSION"; \
        OPENSSL_CONFIG_DIR="$OPENSSL_INSTALL_PATH_PREFIX/etc/ssl"; \
        \
# Required by the crypto & ssl Erlang/OTP applications
        wget --output-document "$OPENSSL_PATH.tar.gz.asc" "$OPENSSL_SOURCE_URL.asc"; \
        wget --output-document "$OPENSSL_PATH.tar.gz" "$OPENSSL_SOURCE_URL"; \
        export GNUPGHOME="$(mktemp -d)"; \
        for key in $OPENSSL_PGP_KEY_IDS; do \
                gpg --batch --keyserver "$PGP_KEYSERVER" --recv-keys "$key"; \
        done; \
        gpg --batch --verify "$OPENSSL_PATH.tar.gz.asc" "$OPENSSL_PATH.tar.gz"; \
        gpgconf --kill all; \
        rm -rf "$GNUPGHOME"; \
        echo "$OPENSSL_SOURCE_SHA256 *$OPENSSL_PATH.tar.gz" | sha256sum -c -; \
        mkdir -p "$OPENSSL_PATH"; \
        tar --extract --file "$OPENSSL_PATH.tar.gz" --directory "$OPENSSL_PATH" --strip-components 1; \
        \
# Configure OpenSSL for compilation
        cd "$OPENSSL_PATH"; \
# OpenSSL's "config" script uses a lot of "uname"-based target detection...
        apkArch="$(apk --print-arch)"; \
# https://dl-cdn.alpinelinux.org/alpine/edge/main/
        case "$apkArch" in \
# https://github.com/openssl/openssl/blob/openssl-3.1.1/Configurations/10-main.conf#L860 (look for "linux-" and "linux64-" keys)
                aarch64) opensslMachine='linux-aarch64' ;; \
# https://github.com/openssl/openssl/blob/openssl-3.1.1/Configurations/10-main.conf#L736-L766
# https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
                armhf) opensslMachine='linux-armv4'; opensslExtraConfig='-march=armv6+fp' ;; \
                armv7) opensslMachine='linux-armv4'; opensslExtraConfig='-march=armv7-a+fp' ;; \
                ppc64le) opensslMachine='linux-ppc64le' ;; \
                riscv64) opensslMachine='linux64-riscv64' ;; \
                s390x) opensslMachine='linux64-s390x' ;; \
                x86) opensslMachine='linux-x86' ;; \
                x86_64) opensslMachine='linux-x86_64' ;; \
                *) echo >&2 "error: unsupported arch: '$apkArch'"; exit 1 ;; \
        esac; \
        MACHINE="$opensslMachine" \
        RELEASE="4.x.y-z" \
        SYSTEM='Linux' \
        BUILD='???' \
        ./Configure \
                "$opensslMachine" \
                enable-fips \
                --prefix="$OPENSSL_INSTALL_PATH_PREFIX" \
                --openssldir="$OPENSSL_CONFIG_DIR" \
                --libdir="$OPENSSL_INSTALL_PATH_PREFIX/lib" \
# add -rpath to avoid conflicts between our OpenSSL's "libssl.so" and the libssl package by making sure "$INSTALL_PATH_PREFIX/lib" is searched first (but only for Erlang/OpenSSL to avoid issues with other tools using libssl; https://github.com/docker-library/rabbitmq/issues/364)
                -Wl,-rpath="$OPENSSL_INSTALL_PATH_PREFIX/lib" \
                ${opensslExtraConfig:-} \
        ; \
# Compile, install OpenSSL, verify that the command-line works & development headers are present
        make -j "$(getconf _NPROCESSORS_ONLN)"; \
        make install_sw install_ssldirs install_fips; \
# use Alpine's CA certificates
        rmdir "$OPENSSL_CONFIG_DIR/certs" "$OPENSSL_CONFIG_DIR/private"; \
        ln -sf /etc/ssl/certs /etc/ssl/private "$OPENSSL_CONFIG_DIR"

# smoke test
RUN $OPENSSL_INSTALL_PATH_PREFIX/bin/openssl version

FROM openssl-builder AS erlang-builder

ARG BUILDKIT_SBOM_SCAN_STAGE=true

RUN set -eux; \
# /usr/local/src doesn't exist in Alpine by default
        mkdir -p /usr/local/src; \
        \
        OTP_SOURCE_URL="https://github.com/erlang/otp/releases/download/OTP-$OTP_VERSION/otp_src_$OTP_VERSION.tar.gz"; \
        OTP_PATH="/usr/local/src/otp-$OTP_VERSION"; \
        \
# Download, verify & extract OTP_SOURCE
        mkdir -p "$OTP_PATH"; \
        wget --output-document "$OTP_PATH.tar.gz" "$OTP_SOURCE_URL"; \
        echo "$OTP_SOURCE_SHA256 *$OTP_PATH.tar.gz" | sha256sum -c -; \
        tar --extract --file "$OTP_PATH.tar.gz" --directory "$OTP_PATH" --strip-components 1; \
        \
# Configure Erlang/OTP for compilation, disable unused features & applications
# https://erlang.org/doc/applications.html
# ERL_TOP is required for Erlang/OTP makefiles to find the absolute path for the installation
        cd "$OTP_PATH"; \
        export ERL_TOP="$OTP_PATH"; \
        export CFLAGS='-g -O2'; \
# add -rpath to avoid conflicts between our OpenSSL's "libssl.so" and the libssl package by making sure "$INSTALL_PATH_PREFIX/lib" is searched first (but only for Erlang/OpenSSL to avoid issues with other tools using libssl; https://github.com/docker-library/rabbitmq/issues/364)
        export CFLAGS="$CFLAGS -Wl,-rpath=$OPENSSL_INSTALL_PATH_PREFIX/lib"; \
        hostArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)"; \
        buildArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \
        dpkgArch="$(dpkg --print-architecture)"; dpkgArch="${dpkgArch##*-}"; \
# JIT is only supported on amd64 + arm64; https://github.com/erlang/otp/blob/OTP-25.3.2.2/erts/configure#L24306-L24347
        jitFlag=; \
        case "$dpkgArch" in \
                amd64 | arm64) jitFlag='--enable-jit' ;; \
        esac; \
        ./configure \
                --prefix="$ERLANG_INSTALL_PATH_PREFIX" \
                --host="$hostArch" \
                --build="$buildArch" \
                --disable-hipe \
                --disable-sctp \
                --disable-silent-rules \
                --enable-builtin-zlib \
                --enable-clock-gettime \
                --enable-hybrid-heap \
                --enable-kernel-poll \
                --enable-smp-support \
                --enable-threads \
                --with-microstate-accounting=extra \
                --with-ssl="$OPENSSL_INSTALL_PATH_PREFIX" \
                --without-common_test \
                --without-debugger \
                --without-dialyzer \
                --without-diameter \
                --without-edoc \
                --without-erl_docgen \
                --without-et \
                --without-eunit \
                --without-ftp \
                --without-hipe \
                --without-jinterface \
                --without-megaco \
                --without-observer \
                --without-odbc \
                --without-reltool \
                --without-snmp \
                --without-ssh \
                --without-tftp \
                --without-wx \
                $jitFlag \
        ; \
# Compile & install Erlang/OTP
        make -j "$(getconf _NPROCESSORS_ONLN)" GEN_OPT_FLGS="-O2 -fno-strict-aliasing"; \
        make install; \
        \
# Remove unnecessary files
        find "$ERLANG_INSTALL_PATH_PREFIX/lib/erlang" -type d -name examples -exec rm -rf '{}' +; \
        find "$ERLANG_INSTALL_PATH_PREFIX/lib/erlang" -type d -name src -exec rm -rf '{}' +; \
        find "$ERLANG_INSTALL_PATH_PREFIX/lib/erlang" -type d -name include -exec rm -rf '{}' +

# Check that Erlang/OTP crypto & ssl were compiled against OpenSSL correctly
ENV PATH=$ERLANG_INSTALL_PATH_PREFIX/bin:$PATH
RUN find $ERLANG_INSTALL_PATH_PREFIX -type f -name 'crypto.so' -exec ldd {} \; | awk '/libcrypto\.so/ { if (!index($3,ENVIRON["OPENSSL_INSTALL_PATH_PREFIX"])) exit 1 }'
RUN erl -noshell -eval 'ok = crypto:start(), ok = io:format("~p~n~n~p~n~n", [crypto:supports(), ssl:versions()]), init:stop().'

FROM alpine:3.23

# OPENSSL/ERLANG_INSTALL_PATH_PREFIX are defined in a different stage, so define them again
ENV ERLANG_INSTALL_PATH_PREFIX=/opt/erlang
ENV OPENSSL_INSTALL_PATH_PREFIX=/opt/openssl

COPY --from=erlang-builder $ERLANG_INSTALL_PATH_PREFIX $ERLANG_INSTALL_PATH_PREFIX
COPY --from=openssl-builder $OPENSSL_INSTALL_PATH_PREFIX $OPENSSL_INSTALL_PATH_PREFIX

ENV PATH=$ERLANG_INSTALL_PATH_PREFIX/bin:$OPENSSL_INSTALL_PATH_PREFIX/bin:$PATH

ENV RABBITMQ_DATA_DIR=/var/lib/rabbitmq

RUN set -eux; \
# Configure OpenSSL to use system certs
        ln -vsf /etc/ssl/certs /etc/ssl/private "$OPENSSL_INSTALL_PATH_PREFIX/etc/ssl"; \
        \
# Ensure run-time dependencies are installed
        runDeps="$( \
                scanelf --needed --nobanner --format '%n#p' --recursive $ERLANG_INSTALL_PATH_PREFIX $OPENSSL_INSTALL_PATH_PREFIX \
                        | tr ',' '\n' \
                        | sort -u \
                        | grep -v '^$\|lib\(crypto\|ssl\)' \
                        | awk 'system("test -e /usr/local/lib/" $1) == 0 { next } { print "so:" $1 }' \
        )"; \
        apk add --no-cache --virtual .otp-run-deps $runDeps; \
        \
# Check that OpenSSL still works after copying from previous builder
        sed -i.ORIG -e "/\.include.*fips/ s!.*!.include $OPENSSL_INSTALL_PATH_PREFIX/etc/ssl/fipsmodule.cnf!" \
                -e '/# fips =/s/.*/fips = fips_sect/' "$OPENSSL_INSTALL_PATH_PREFIX/etc/ssl/openssl.cnf"; \
        sed -i.ORIG -e '/^activate/s/^/#/' "$OPENSSL_INSTALL_PATH_PREFIX/etc/ssl/fipsmodule.cnf"; \
        [ "$(command -v openssl)" = "$OPENSSL_INSTALL_PATH_PREFIX/bin/openssl" ]; \
        openssl version; \
        openssl version -d; \
        \
# Check that Erlang/OTP crypto & ssl were compiled against OpenSSL correctly
        erl -noshell -eval 'ok = crypto:start(), ok = io:format("~p~n~n~p~n~n", [crypto:supports(), ssl:versions()]), init:stop().'; \
        \
# Create rabbitmq system user & group, fix permissions & allow root user to connect to the RabbitMQ Erlang VM
        addgroup -g 101 -S rabbitmq; \
        adduser -u 100 -S -h "$RABBITMQ_DATA_DIR" -G rabbitmq rabbitmq; \
        mkdir -p "$RABBITMQ_DATA_DIR" /etc/rabbitmq /etc/rabbitmq/conf.d /tmp/rabbitmq-ssl /var/log/rabbitmq; \
        chown -fR rabbitmq:rabbitmq "$RABBITMQ_DATA_DIR" /etc/rabbitmq /etc/rabbitmq/conf.d /tmp/rabbitmq-ssl /var/log/rabbitmq; \
        chmod 1777 "$RABBITMQ_DATA_DIR" /etc/rabbitmq /etc/rabbitmq/conf.d /tmp/rabbitmq-ssl /var/log/rabbitmq; \
        ln -sf "$RABBITMQ_DATA_DIR/.erlang.cookie" /root/.erlang.cookie; \
        \
        apk add --no-cache \
# grab su-exec for easy step-down from root
                'su-exec>=0.2' \
# bash for docker-entrypoint.sh
                bash \
# "ps" for "rabbitmqctl wait" (https://github.com/docker-library/rabbitmq/issues/162)
                procps \
# Bring in tzdata so users could set the timezones through the environment
                tzdata

# Use the latest stable RabbitMQ release (https://www.rabbitmq.com/download.html)
ENV RABBITMQ_VERSION=4.2.6
# https://www.rabbitmq.com/signatures.html#importing-gpg
ENV RABBITMQ_PGP_KEY_ID=0x0A9AF2115F4687BD29803A206B73A36E6026DFCA
ENV RABBITMQ_HOME=/opt/rabbitmq

# Add RabbitMQ to PATH
ENV PATH=$RABBITMQ_HOME/sbin:$PATH

# Install RabbitMQ
RUN set -eux; \
# /usr/local/src doesn't exist in Alpine by default
        mkdir -p /usr/local/src; \
        \
        apk add --no-cache --virtual .build-deps \
                gnupg \
                xz \
        ; \
        \
        RABBITMQ_SOURCE_URL="https://github.com/rabbitmq/rabbitmq-server/releases/download/v$RABBITMQ_VERSION/rabbitmq-server-generic-unix-latest-toolchain-$RABBITMQ_VERSION.tar.xz"; \
        RABBITMQ_PATH="/usr/local/src/rabbitmq-$RABBITMQ_VERSION"; \
        \
        wget --output-document "$RABBITMQ_PATH.tar.xz.asc" "$RABBITMQ_SOURCE_URL.asc"; \
        wget --output-document "$RABBITMQ_PATH.tar.xz" "$RABBITMQ_SOURCE_URL"; \
        \
        export GNUPGHOME="$(mktemp -d)"; \
        gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$RABBITMQ_PGP_KEY_ID"; \
        gpg --batch --verify "$RABBITMQ_PATH.tar.xz.asc" "$RABBITMQ_PATH.tar.xz"; \
        gpgconf --kill all; \
        rm -rf "$GNUPGHOME"; \
        \
        mkdir -p "$RABBITMQ_HOME"; \
        tar --extract --file "$RABBITMQ_PATH.tar.xz" --directory "$RABBITMQ_HOME" --strip-components 1; \
        rm -rf "$RABBITMQ_PATH"*; \
# Do not default SYS_PREFIX to RABBITMQ_HOME, leave it empty
        grep -qE '^SYS_PREFIX=\$\{RABBITMQ_HOME\}$' "$RABBITMQ_HOME/sbin/rabbitmq-defaults"; \
        sed -i 's/^SYS_PREFIX=.*$/SYS_PREFIX=/' "$RABBITMQ_HOME/sbin/rabbitmq-defaults"; \
        grep -qE '^SYS_PREFIX=$' "$RABBITMQ_HOME/sbin/rabbitmq-defaults"; \
        chown -R rabbitmq:rabbitmq "$RABBITMQ_HOME"; \
        \
        apk del --no-network .build-deps; \
        \
# verify assumption of no stale cookies
        [ ! -e "$RABBITMQ_DATA_DIR/.erlang.cookie" ]; \
# Ensure RabbitMQ was installed correctly by running a few commands that do not depend on a running server, as the rabbitmq user
# If they all succeed, it's safe to assume that things have been set up correctly
        su-exec rabbitmq rabbitmqctl help; \
        su-exec rabbitmq rabbitmqctl list_ciphers; \
        su-exec rabbitmq rabbitmq-plugins list; \
# no stale cookies
        rm "$RABBITMQ_DATA_DIR/.erlang.cookie"

# Enable Prometheus-style metrics by default (https://github.com/docker-library/rabbitmq/issues/419)
RUN su-exec rabbitmq rabbitmq-plugins enable --offline rabbitmq_prometheus

# Added for backwards compatibility - users can simply COPY custom plugins to /plugins
RUN ln -sf /opt/rabbitmq/plugins /plugins

# set home so that any `--user` knows where to put the erlang cookie
ENV HOME=$RABBITMQ_DATA_DIR
# Hint that the data (a.k.a. home dir) dir should be separate volume
VOLUME $RABBITMQ_DATA_DIR

# warning: the VM is running with native name encoding of latin1 which may cause Elixir to malfunction as it expects utf8. Please ensure your locale is set to UTF-8 (which can be verified by running "locale" in your shell)
# Setting all environment variables that control language preferences, behaviour differs - https://www.gnu.org/software/gettext/manual/html_node/The-LANGUAGE-variable.html#The-LANGUAGE-variable
# https://docs.docker.com/samples/library/ubuntu/#locales
ENV LANG=C.UTF-8 LANGUAGE=C.UTF-8 LC_ALL=C.UTF-8

# the rabbitmq-server startup script uses RUNNING_UNDER_SYSTEMD to determine if the erl command
# should be started via exec, which results in beam.smp becoming PID 1 in the container
ENV RUNNING_UNDER_SYSTEMD=true







RUN set -eux; \
        rabbitmq-plugins enable --offline rabbitmq_management; \
# make sure the metrics collector is re-enabled (disabled in the base image for Prometheus-style metrics by default)
        rm -f /etc/rabbitmq/conf.d/20-management_agent.disable_metrics_collector.conf

RUN set -eux; \
        arch="$(apk --print-arch)"; \
        \
        case "$arch" in \
                'x86_64') url='https://github.com/rabbitmq/rabbitmqadmin-ng/releases/download/v2.29.0/rabbitmqadmin-2.29.0-x86_64-unknown-linux-musl'; digest='cd5f56199daf7bf66cbe81e69340766fafde493bb46c9170a3bd271bb1967831' ;; \
                'aarch64') url='https://github.com/rabbitmq/rabbitmqadmin-ng/releases/download/v2.29.0/rabbitmqadmin-2.29.0-aarch64-unknown-linux-musl'; digest='3806e34c27de3faa722f7e5eca6def6dd1d4ad0100ee176ba0553bea35ba9801' ;; \
                *) echo "[INFO] rabbitmqadmin is not available on $arch (yet?)"; exit 0 ;; \
        esac; \
        \
        wget -O /usr/local/bin/rabbitmqadmin "$url"; \
        echo "$digest */usr/local/bin/rabbitmqadmin" | sha256sum -c -; \
        \
        chmod +x /usr/local/bin/rabbitmqadmin; \
        rabbitmqadmin --help

EXPOSE 15671 15672



COPY --chown=rabbitmq:rabbitmq 10-defaults.conf 20-management_agent.disable_metrics_collector.conf /etc/rabbitmq/conf.d/
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]

EXPOSE 4369 5671 5672 15691 15692 25672
CMD ["rabbitmq-server"]

docker-entrypoint.sh

#!/usr/bin/env bash
set -euo pipefail

# allow the container to be started with `--user`
if [[ "$1" == rabbitmq* ]] && [ "$(id -u)" = '0' ]; then
        if [ "$1" = 'rabbitmq-server' ]; then
                find /var/lib/rabbitmq \! -user rabbitmq -exec chown rabbitmq '{}' +
        fi

        exec su-exec rabbitmq "$BASH_SOURCE" "$@"
fi

deprecatedEnvVars=(
        RABBITMQ_DEFAULT_PASS_FILE
        RABBITMQ_DEFAULT_USER_FILE
        RABBITMQ_MANAGEMENT_SSL_CACERTFILE
        RABBITMQ_MANAGEMENT_SSL_CERTFILE
        RABBITMQ_MANAGEMENT_SSL_DEPTH
        RABBITMQ_MANAGEMENT_SSL_FAIL_IF_NO_PEER_CERT
        RABBITMQ_MANAGEMENT_SSL_KEYFILE
        RABBITMQ_MANAGEMENT_SSL_VERIFY
        RABBITMQ_SSL_CACERTFILE
        RABBITMQ_SSL_CERTFILE
        RABBITMQ_SSL_DEPTH
        RABBITMQ_SSL_FAIL_IF_NO_PEER_CERT
        RABBITMQ_SSL_KEYFILE
        RABBITMQ_SSL_VERIFY
        RABBITMQ_VM_MEMORY_HIGH_WATERMARK
)
hasOldEnv=
for old in "${deprecatedEnvVars[@]}"; do
        if [ -n "${!old:-}" ]; then
                echo >&2 "error: $old is set but deprecated"
                hasOldEnv=1
        fi
done
if [ -n "$hasOldEnv" ]; then
        echo >&2 'error: deprecated environment variables detected'
        echo >&2
        echo >&2 'Please use a configuration file instead; visit https://www.rabbitmq.com/configure.html to learn more'
        echo >&2
        exit 1
fi

# if long and short hostnames are not the same, use long hostnames
if [ -z "${RABBITMQ_USE_LONGNAME:-}" ] && [ "$(hostname)" != "$(hostname -s)" ]; then
        : "${RABBITMQ_USE_LONGNAME:=true}"
fi

exec "$@"

Build and Push to Container Registry

docker build -t rabbitmq <registry>/rabbitmq:4.2.6
docker login <registry>
docker push <registry>/rabbitmq:4.2.6