|
| 1 | +FROM alpine:3.5 |
| 2 | + |
| 3 | +# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added |
| 4 | +RUN addgroup -S rabbitmq && adduser -S -h /var/lib/rabbitmq -G rabbitmq rabbitmq |
| 5 | + |
| 6 | +# grab su-exec for easy step-down from root |
| 7 | +RUN apk add --no-cache 'su-exec>=0.2' |
| 8 | + |
| 9 | +RUN apk add --no-cache \ |
| 10 | +# Bash for docker-entrypoint |
| 11 | + bash \ |
| 12 | +# Erlang for RabbitMQ |
| 13 | + erlang-asn1 \ |
| 14 | + erlang-hipe \ |
| 15 | + erlang-crypto \ |
| 16 | + erlang-eldap \ |
| 17 | + erlang-inets \ |
| 18 | + erlang-mnesia \ |
| 19 | + erlang \ |
| 20 | + erlang-os-mon \ |
| 21 | + erlang-public-key \ |
| 22 | + erlang-sasl \ |
| 23 | + erlang-ssl \ |
| 24 | + erlang-syntax-tools \ |
| 25 | + erlang-xmerl |
| 26 | + |
| 27 | +# get logs to stdout (thanks @dumbbell for pushing this upstream! :D) |
| 28 | +ENV RABBITMQ_LOGS=- RABBITMQ_SASL_LOGS=- |
| 29 | +# https://github.com/rabbitmq/rabbitmq-server/commit/53af45bf9a162dec849407d114041aad3d84feaf |
| 30 | + |
| 31 | +ENV RABBITMQ_HOME /opt/rabbitmq |
| 32 | +ENV PATH $RABBITMQ_HOME/sbin:$PATH |
| 33 | + |
| 34 | +# https://www.rabbitmq.com/install-generic-unix.html |
| 35 | +ENV GPG_KEY 0A9AF2115F4687BD29803A206B73A36E6026DFCA |
| 36 | + |
| 37 | +ENV RABBITMQ_VERSION 3.6.6 |
| 38 | + |
| 39 | +RUN set -ex; \ |
| 40 | + \ |
| 41 | + apk add --no-cache --virtual .build-deps \ |
| 42 | + ca-certificates \ |
| 43 | + gnupg \ |
| 44 | + libressl \ |
| 45 | + tar \ |
| 46 | + xz \ |
| 47 | + ; \ |
| 48 | + \ |
| 49 | + wget -O rabbitmq-server.tar.xz "https://www.rabbitmq.com/releases/rabbitmq-server/v${RABBITMQ_VERSION}/rabbitmq-server-generic-unix-${RABBITMQ_VERSION}.tar.xz"; \ |
| 50 | + wget -O rabbitmq-server.tar.xz.asc "https://www.rabbitmq.com/releases/rabbitmq-server/v${RABBITMQ_VERSION}/rabbitmq-server-generic-unix-${RABBITMQ_VERSION}.tar.xz.asc"; \ |
| 51 | + \ |
| 52 | + export GNUPGHOME="$(mktemp -d)"; \ |
| 53 | + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY"; \ |
| 54 | + gpg --batch --verify rabbitmq-server.tar.xz.asc rabbitmq-server.tar.xz; \ |
| 55 | + rm -r "$GNUPGHOME" rabbitmq-server.tar.xz.asc; \ |
| 56 | + \ |
| 57 | + mkdir -p "$RABBITMQ_HOME"; \ |
| 58 | + tar \ |
| 59 | + --extract \ |
| 60 | + --verbose \ |
| 61 | + --file rabbitmq-server.tar.xz \ |
| 62 | + --directory "$RABBITMQ_HOME" \ |
| 63 | + --strip-components 1 \ |
| 64 | + ; \ |
| 65 | + rm rabbitmq-server.tar.xz; \ |
| 66 | + \ |
| 67 | +# update SYS_PREFIX (first making sure it's set to what we expect it to be) |
| 68 | + grep -qE '^SYS_PREFIX=\$\{RABBITMQ_HOME\}$' "$RABBITMQ_HOME/sbin/rabbitmq-defaults"; \ |
| 69 | + sed -ri 's!^(SYS_PREFIX=).*$!\1!g' "$RABBITMQ_HOME/sbin/rabbitmq-defaults"; \ |
| 70 | + grep -qE '^SYS_PREFIX=$' "$RABBITMQ_HOME/sbin/rabbitmq-defaults"; \ |
| 71 | + \ |
| 72 | + apk del .build-deps |
| 73 | + |
| 74 | +# set home so that any `--user` knows where to put the erlang cookie |
| 75 | +ENV HOME /var/lib/rabbitmq |
| 76 | + |
| 77 | +RUN mkdir -p /var/lib/rabbitmq /etc/rabbitmq \ |
| 78 | + && echo '[ { rabbit, [ { loopback_users, [ ] } ] } ].' > /etc/rabbitmq/rabbitmq.config \ |
| 79 | + && chown -R rabbitmq:rabbitmq /var/lib/rabbitmq /etc/rabbitmq \ |
| 80 | + && chmod -R 777 /var/lib/rabbitmq /etc/rabbitmq |
| 81 | +VOLUME /var/lib/rabbitmq |
| 82 | + |
| 83 | +# add a symlink to the .erlang.cookie in /root so we can "docker exec rabbitmqctl ..." without gosu |
| 84 | +RUN ln -sf /var/lib/rabbitmq/.erlang.cookie /root/ |
| 85 | + |
| 86 | +RUN ln -sf "$RABBITMQ_HOME/plugins" /plugins |
| 87 | + |
| 88 | +COPY docker-entrypoint.sh /usr/local/bin/ |
| 89 | +ENTRYPOINT ["docker-entrypoint.sh"] |
| 90 | + |
| 91 | +EXPOSE 4369 5671 5672 25672 |
| 92 | +CMD ["rabbitmq-server"] |
0 commit comments