-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #4 from microsoft/image_optimization
Container Image Size Optimization
- Loading branch information
Showing
4 changed files
with
714 additions
and
78 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,17 +1,13 @@ | ||
# The official Canonical Ubuntu Focal image is ideal from a security perspective, | ||
# especially for the enterprises that we, the RabbitMQ team, have to deal with | ||
FROM mcr.microsoft.com/mirror/docker/library/ubuntu:22.04 as build-base | ||
FROM alpine:3.19 as build-base | ||
|
||
ARG BUILDKIT_SBOM_SCAN_STAGE=true | ||
|
||
RUN set -eux; \ | ||
apt-get update; \ | ||
apt-get install -y --no-install-recommends \ | ||
build-essential \ | ||
ca-certificates \ | ||
gnupg \ | ||
libncurses5-dev \ | ||
wget | ||
RUN apk add --no-cache \ | ||
build-base \ | ||
dpkg-dev \ | ||
dpkg \ | ||
gnupg \ | ||
libc-dev \ | ||
linux-headers \ | ||
ncurses-dev | ||
|
||
FROM build-base as openssl-builder | ||
|
||
|
@@ -20,19 +16,19 @@ 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:3.9 --build-arg PGP_KEYSERVER=pgpkeys.eu 3.9/ubuntu | ||
# run the build with a different PGP_KEYSERVER, e.g. docker build --tag rabbitmq:3.13 --build-arg PGP_KEYSERVER=pgpkeys.eu 3.13/ubuntu | ||
# For context, see https://github.com/docker-library/official-images/issues/4252 | ||
|
||
ENV OPENSSL_VERSION 3.1.4 | ||
ENV OPENSSL_SOURCE_SHA256="840af5366ab9b522bde525826be3ef0fb0af81c6a9ebd84caa600fea1731eee3" | ||
ENV OPENSSL_VERSION 3.1.6 | ||
ENV OPENSSL_SOURCE_SHA256="5d2be4036b478ef3cb0a854ca9b353072c3a0e26d8a56f8f0ab9fb6ed32d38d7" | ||
# https://www.openssl.org/community/otc.html | ||
# https://www.openssl.org/source/ | ||
ENV OPENSSL_PGP_KEY_IDS="0x8657ABB260F056B1E5190839D9C4D26D0E604491 0xB7C1C14360F353A36862E4D5231C84CDDCC69C45 0xC1F33DD8CE1D4CC613AF14DA9195C48241FBF7DD 0x95A9908DDFA16830BE9FB9003D30A3A9FF1360DC 0x7953AC1FBC3DC8B3B292393ED5E9E43F7DF9EE8C 0xA21FAB74B0088AA361152586B8EF1A6BA9DA2D5C 0xE5E52560DD91C556DDBDA5D02064C53641C25E5D 0xEFC0A467D613CB83C7ED6D30D894E2CE8B3D79F5" | ||
|
||
ENV OTP_VERSION 25.3.2.7 | ||
ENV OTP_VERSION 26.2.5 | ||
# 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="a8662859d153d3c4253c6a3a4d1538d0f32ce1cf02bb5484b17c9c176da37b37" | ||
ENV OTP_SOURCE_SHA256="de155c4ad9baab2b9e6c96dbd03bf955575a04dd6feee9c08758beb28484c9f6" | ||
|
||
# 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 | ||
|
@@ -44,42 +40,44 @@ ENV OPENSSL_INSTALL_PATH_PREFIX /opt/openssl | |
# 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://www.openssl.org/source/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 --progress dot:giga --output-document "$OPENSSL_PATH.tar.gz.asc" "$OPENSSL_SOURCE_URL.asc"; \ | ||
wget --progress dot:giga --output-document "$OPENSSL_PATH.tar.gz" "$OPENSSL_SOURCE_URL"; \ | ||
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 --check --strict -; \ | ||
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"; \ | ||
# without specifying "--libdir", Erlang will fail during "crypto:supports()" looking for a "pthread_atfork" function that doesn't exist (but only on arm32v7/armhf??) | ||
# OpenSSL's "config" script uses a lot of "uname"-based target detection... | ||
dpkgArch="$(dpkg --print-architecture)"; dpkgArch="${dpkgArch##*-}"; \ | ||
# https://deb.debian.org/debian/dists/unstable/main/ | ||
case "$dpkgArch" in \ | ||
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) | ||
amd64) opensslMachine='linux-x86_64' ;; \ | ||
arm64) opensslMachine='linux-aarch64' ;; \ | ||
aarch64) opensslMachine='linux-aarch64' ;; \ | ||
# https://github.com/openssl/openssl/blob/openssl-3.1.1/Configurations/10-main.conf#L736-L766 | ||
# https://wiki.debian.org/ArchitectureSpecificsMemo#Architecture_baselines | ||
# https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html | ||
armhf) opensslMachine='linux-armv4'; opensslExtraConfig='-march=armv7-a+fp' ;; \ | ||
i386) opensslMachine='linux-x86' ;; \ | ||
ppc64el) opensslMachine='linux-ppc64le' ;; \ | ||
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" \ | ||
|
@@ -99,8 +97,7 @@ RUN set -eux; \ | |
# 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; \ | ||
ldconfig; \ | ||
# use Debian's CA certificates | ||
# 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" | ||
|
||
|
@@ -112,22 +109,25 @@ 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 --progress dot:giga --output-document "$OTP_PATH.tar.gz" "$OTP_SOURCE_URL"; \ | ||
echo "$OTP_SOURCE_SHA256 *$OTP_PATH.tar.gz" | sha256sum --check --strict -; \ | ||
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"; \ | ||
CFLAGS="$(dpkg-buildflags --get CFLAGS)"; export CFLAGS; \ | ||
# add -rpath to avoid conflicts between our OpenSSL's "libssl.so" and the libssl package by making sure "$OPENSSL_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='-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)"; \ | ||
|
@@ -172,7 +172,6 @@ RUN set -eux; \ | |
--without-wx \ | ||
$jitFlag \ | ||
; \ | ||
\ | ||
# Compile & install Erlang/OTP | ||
make -j "$(getconf _NPROCESSORS_ONLN)" GEN_OPT_FLGS="-O2 -fno-strict-aliasing"; \ | ||
make install; \ | ||
|
@@ -187,16 +186,14 @@ 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 mcr.microsoft.com/mirror/docker/library/ubuntu:22.04 | ||
FROM alpine:3.19 | ||
|
||
# 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 | ||
RUN echo '{"spdxVersion":"SPDX-2.3","SPDXID":"SPDXRef-DOCUMENT","name":"erlang-sbom","packages":[{"name":"erlang","versionInfo":"25.3.2.7","SPDXID":"SPDXRef-Package--erlang","externalRefs":[{"referenceCategory":"PACKAGE-MANAGER","referenceType":"purl","referenceLocator":"pkg:generic/[email protected]?os_name=ubuntu&os_version=22.04"}],"licenseDeclared":"Apache-2.0"}]}' > $ERLANG_INSTALL_PATH_PREFIX/erlang.spdx.json | ||
|
||
COPY --from=erlang-builder $ERLANG_INSTALL_PATH_PREFIX $ERLANG_INSTALL_PATH_PREFIX | ||
COPY --from=openssl-builder $OPENSSL_INSTALL_PATH_PREFIX $OPENSSL_INSTALL_PATH_PREFIX | ||
RUN echo '{"spdxVersion":"SPDX-2.3","SPDXID":"SPDXRef-DOCUMENT","name":"openssl-sbom","packages":[{"name":"openssl","versionInfo":"3.1.4","SPDXID":"SPDXRef-Package--openssl","externalRefs":[{"referenceCategory":"PACKAGE-MANAGER","referenceType":"purl","referenceLocator":"pkg:generic/[email protected]?os_name=ubuntu&os_version=22.04"}],"licenseDeclared":"Apache-2.0"}]}' > $OPENSSL_INSTALL_PATH_PREFIX/openssl.spdx.json | ||
|
||
ENV PATH $ERLANG_INSTALL_PATH_PREFIX/bin:$OPENSSL_INSTALL_PATH_PREFIX/bin:$PATH | ||
|
||
|
@@ -206,8 +203,17 @@ 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 | ||
ldconfig; \ | ||
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"; \ | ||
|
@@ -219,15 +225,25 @@ RUN set -eux; \ | |
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 | ||
groupadd --gid 999 --system rabbitmq; \ | ||
useradd --uid 999 --system --home-dir "$RABBITMQ_DATA_DIR" --gid rabbitmq rabbitmq; \ | ||
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 | ||
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 3.9.29 | ||
ENV RABBITMQ_VERSION 3.13.3 | ||
# https://www.rabbitmq.com/signatures.html#importing-gpg | ||
ENV RABBITMQ_PGP_KEY_ID 0x0A9AF2115F4687BD29803A206B73A36E6026DFCA | ||
ENV RABBITMQ_HOME /opt/rabbitmq | ||
|
@@ -237,31 +253,19 @@ ENV PATH $RABBITMQ_HOME/sbin:$PATH | |
|
||
# Install RabbitMQ | ||
RUN set -eux; \ | ||
export DEBIAN_FRONTEND=noninteractive; \ | ||
apt-get update; \ | ||
apt-get install --yes --no-install-recommends \ | ||
ca-certificates \ | ||
# grab gosu for easy step-down from root | ||
gosu \ | ||
# Bring in tzdata so users could set the timezones through the environment | ||
tzdata \ | ||
; \ | ||
# verify that the "gosu" binary works | ||
gosu nobody true; \ | ||
# /usr/local/src doesn't exist in Alpine by default | ||
mkdir -p /usr/local/src; \ | ||
\ | ||
savedAptMark="$(apt-mark showmanual)"; \ | ||
apt-get install --yes --no-install-recommends \ | ||
apk add --no-cache --virtual .build-deps \ | ||
gnupg \ | ||
wget \ | ||
xz-utils \ | ||
xz \ | ||
; \ | ||
rm -rf /var/lib/apt/lists/*; \ | ||
\ | ||
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 --progress dot:giga --output-document "$RABBITMQ_PATH.tar.xz.asc" "$RABBITMQ_SOURCE_URL.asc"; \ | ||
wget --progress dot:giga --output-document "$RABBITMQ_PATH.tar.xz" "$RABBITMQ_SOURCE_URL"; \ | ||
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"; \ | ||
|
@@ -278,24 +282,20 @@ RUN set -eux; \ | |
grep -qE '^SYS_PREFIX=$' "$RABBITMQ_HOME/sbin/rabbitmq-defaults"; \ | ||
chown -R rabbitmq:rabbitmq "$RABBITMQ_HOME"; \ | ||
\ | ||
apt-mark auto '.*' > /dev/null; \ | ||
apt-mark manual $savedAptMark; \ | ||
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ | ||
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 | ||
gosu rabbitmq rabbitmqctl help; \ | ||
gosu rabbitmq rabbitmqctl list_ciphers; \ | ||
gosu rabbitmq rabbitmq-plugins list; \ | ||
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"; \ | ||
\ | ||
echo '{"spdxVersion":"SPDX-2.3","SPDXID":"SPDXRef-DOCUMENT","name":"rabbitmq-sbom","packages":[{"name":"rabbitmq","versionInfo":"3.9.29","SPDXID":"SPDXRef-Package--rabbitmq","externalRefs":[{"referenceCategory":"PACKAGE-MANAGER","referenceType":"purl","referenceLocator":"pkg:generic/[email protected]?os_name=ubuntu&os_version=22.04"}],"licenseDeclared":"MPL-2.0 AND Apache-2.0"}]}' > $RABBITMQ_HOME/rabbitmq.spdx.json | ||
rm "$RABBITMQ_DATA_DIR/.erlang.cookie" | ||
|
||
# Enable Prometheus-style metrics by default (https://github.com/docker-library/rabbitmq/issues/419) | ||
RUN gosu rabbitmq rabbitmq-plugins enable --offline rabbitmq_prometheus | ||
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 | ||
|
@@ -311,8 +311,8 @@ VOLUME $RABBITMQ_DATA_DIR | |
ENV LANG=C.UTF-8 LANGUAGE=C.UTF-8 LC_ALL=C.UTF-8 | ||
|
||
COPY --chown=rabbitmq:rabbitmq src/10-defaults.conf src/20-management_agent.disable_metrics_collector.conf /etc/rabbitmq/conf.d/ | ||
COPY --chmod=0777 src/docker-entrypoint.sh /usr/local/bin/ | ||
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] | ||
COPY src/docker-entrypoint.sh /usr/local/bin/ | ||
ENTRYPOINT ["docker-entrypoint.sh"] | ||
|
||
EXPOSE 4369 5671 5672 15691 15692 25672 | ||
CMD ["rabbitmq-server"] |
Oops, something went wrong.