Skip to content

Commit bab8d0a

Browse files
authored
Merge pull request #1996 from infosiftr/rabbitmq-3.9
Remove rabbitmq environment variable usage since it is removed in 3.9
2 parents de70aa5 + 2f33734 commit bab8d0a

File tree

1 file changed

+33
-97
lines changed

1 file changed

+33
-97
lines changed

rabbitmq/content.md

Lines changed: 33 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -29,50 +29,46 @@ This will start a RabbitMQ container listening on the default port of 5672. If y
2929

3030
Note the `database dir` there, especially that it has my "Node Name" appended to the end for the file storage. This image makes all of `/var/lib/rabbitmq` a volume by default.
3131

32-
### Memory Limits
33-
34-
RabbitMQ contains functionality which explicitly tracks and manages memory usage, and thus needs to be made aware of cgroup-imposed limits.
35-
36-
The upstream configuration setting for this is `vm_memory_high_watermark`, and it is described under ["Memory Alarms"](https://www.rabbitmq.com/memory.html) in the documentation.
37-
38-
In this image, this value is set via `RABBITMQ_VM_MEMORY_HIGH_WATERMARK`. The value of this environment variable is interpreted as follows:
39-
40-
- `0.49` is treated as `49%`, just like upstream (`{ vm_memory_high_watermark, 0.49 }`)
41-
- `56%` is treated as `56%` (`0.56`; `{ vm_memory_high_watermark, 0.56 }`)
42-
- `1073741824` is treated as an absolute number of bytes (`{ vm_memory_high_watermark, { absolute, 1073741824 } }`)
43-
- `1024MiB` is treated as an absolute number of bytes with a unit (`{ vm_memory_high_watermark, { absolute, "1024MiB" } }`)
44-
45-
The main behavioral difference is in how percentages are handled. If the current container has a memory limit (`--memory`/`-m`), a percentage value will be calculated to an absolute byte value based on the memory limit, rather than being passed to RabbitMQ as-is. For example, a container run with `--memory 2048m` (and the implied upstream-default `RABBITMQ_VM_MEMORY_HIGH_WATERMARK` of `40%`) will set the effective limit to `819MB` (which is `40%` of `2048MB`).
46-
47-
### Erlang Cookie
32+
### Environment Variables
4833

49-
See the [RabbitMQ "Clustering Guide"](https://www.rabbitmq.com/clustering.html#erlang-cookie) for more information about cookies and why they're necessary.
34+
For a list of environment variables supported by RabbitMQ itself, see the [Environment Variables section of rabbitmq.com/configure](https://www.rabbitmq.com/configure.html#supported-environment-variables)
5035

51-
For setting a consistent cookie (especially useful for clustering but also for remote/cross-container administration via `rabbitmqctl`), use `RABBITMQ_ERLANG_COOKIE`:
36+
**WARNING:** As of RabbitMQ 3.9, all of the docker-specific variables listed below are deprecated and no longer used. Please use a configuration file instead; visit [rabbitmq.com/configure](https://www.rabbitmq.com/configure.html) to learn more about the configuration file. For a starting point, the 3.8 images will print out the config file it generated from supplied environment variables.
5237

53-
```console
54-
$ docker run -d --hostname some-rabbit --name some-rabbit --network some-network -e RABBITMQ_ERLANG_COOKIE='secret cookie here' %%IMAGE%%:3
38+
```bash
39+
# Unavailable in 3.9 and up
40+
RABBITMQ_DEFAULT_PASS
41+
RABBITMQ_DEFAULT_PASS_FILE
42+
RABBITMQ_DEFAULT_USER
43+
RABBITMQ_DEFAULT_USER_FILE
44+
RABBITMQ_DEFAULT_VHOST
45+
RABBITMQ_ERLANG_COOKIE
46+
RABBITMQ_MANAGEMENT_SSL_CACERTFILE
47+
RABBITMQ_MANAGEMENT_SSL_CERTFILE
48+
RABBITMQ_MANAGEMENT_SSL_DEPTH
49+
RABBITMQ_MANAGEMENT_SSL_FAIL_IF_NO_PEER_CERT
50+
RABBITMQ_MANAGEMENT_SSL_KEYFILE
51+
RABBITMQ_MANAGEMENT_SSL_VERIFY
52+
RABBITMQ_SSL_CACERTFILE
53+
RABBITMQ_SSL_CERTFILE
54+
RABBITMQ_SSL_DEPTH
55+
RABBITMQ_SSL_FAIL_IF_NO_PEER_CERT
56+
RABBITMQ_SSL_KEYFILE
57+
RABBITMQ_SSL_VERIFY
58+
RABBITMQ_VM_MEMORY_HIGH_WATERMARK
5559
```
5660

57-
This can then be used from a separate instance to connect:
61+
### Memory Limits
5862

59-
```console
60-
$ docker run -it --rm --network some-network -e RABBITMQ_ERLANG_COOKIE='secret cookie here' %%IMAGE%%:3 bash
61-
root@f2a2d3d27c75:/# rabbitmqctl -n rabbit@some-rabbit list_users
62-
Listing users ...
63-
guest [administrator]
64-
```
63+
RabbitMQ contains functionality which explicitly tracks and manages memory usage, and thus needs to be made aware of cgroup-imposed limits (e.g. [`docker run --memory=..`](https://docs.docker.com/config/containers/resource_constraints/#limit-a-containers-access-to-memory)).
6564

66-
Alternatively, one can also use `RABBITMQ_NODENAME` to make repeated `rabbitmqctl` invocations simpler:
65+
The upstream configuration setting for this is `vm_memory_high_watermark` in `rabbitmq.conf`, and it is described under ["Memory Alarms"](https://www.rabbitmq.com/memory.html) in the documentation. If you set a relative limit via `vm_memory_high_watermark.relative`, then RabbitMQ will calculate its limits based on the host's total memory and not the limit set by the contianer runtime.
6766

68-
```console
69-
$ docker run -it --rm --network some-network -e RABBITMQ_ERLANG_COOKIE='secret cookie here' -e RABBITMQ_NODENAME=rabbit@some-rabbit %%IMAGE%%:3 bash
70-
root@f2a2d3d27c75:/# rabbitmqctl list_users
71-
Listing users ...
72-
guest [administrator]
73-
```
67+
### Erlang Cookie
68+
69+
See the [RabbitMQ "Clustering Guide"](https://www.rabbitmq.com/clustering.html#erlang-cookie) for more information about cookies and why they're necessary. For setting a consistent cookie (especially useful for clustering but also for remote/cross-container administration via `rabbitmqctl`), provide a cookie file (default location of `/var/lib/rabbitmq/.erlang.cookie`).
7470

75-
If you wish to provide the cookie via a file (such as with [Docker Secrets](https://docs.docker.com/engine/swarm/secrets/)), it needs to be mounted at `/var/lib/rabbitmq/.erlang.cookie`:
71+
For example, you can provide the cookie via a file (such as with [Docker Secrets](https://docs.docker.com/engine/swarm/secrets/)):
7672

7773
```console
7874
docker service create ... --secret source=my-erlang-cookie,target=/var/lib/rabbitmq/.erlang.cookie ... %%IMAGE%%
@@ -96,70 +92,12 @@ $ docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 %%IMAGE%%:
9692

9793
You can then go to `http://localhost:8080` or `http://host-ip:8080` in a browser.
9894

99-
### Environment Variables
100-
101-
A small selection of the possible environment variables are defined in the Dockerfile to be passed through the docker engine (listed below). For a list of environment variables supported by RabbitMQ itself, see: https://www.rabbitmq.com/configure.html
102-
103-
For SSL configuration without the management plugin:
104-
105-
```bash
106-
RABBITMQ_SSL_CACERTFILE
107-
RABBITMQ_SSL_CERTFILE
108-
RABBITMQ_SSL_DEPTH
109-
RABBITMQ_SSL_FAIL_IF_NO_PEER_CERT
110-
RABBITMQ_SSL_KEYFILE
111-
RABBITMQ_SSL_VERIFY
112-
```
113-
114-
For SSL configuration using the management plugin:
115-
116-
```bash
117-
RABBITMQ_MANAGEMENT_SSL_CACERTFILE
118-
RABBITMQ_MANAGEMENT_SSL_CERTFILE
119-
RABBITMQ_MANAGEMENT_SSL_DEPTH
120-
RABBITMQ_MANAGEMENT_SSL_FAIL_IF_NO_PEER_CERT
121-
RABBITMQ_MANAGEMENT_SSL_KEYFILE
122-
RABBITMQ_MANAGEMENT_SSL_VERIFY
123-
```
124-
125-
### Setting default user and password
126-
127-
If you wish to change the default username and password of `guest` / `guest`, you can do so with the `RABBITMQ_DEFAULT_USER` and `RABBITMQ_DEFAULT_PASS` environmental variables:
128-
129-
```console
130-
$ docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password %%IMAGE%%:3-management
131-
```
132-
133-
You can then go to `http://localhost:8080` or `http://host-ip:8080` in a browser and use `user`/`password` to gain access to the management console
134-
135-
To source the username and password from files instead of environment variables, add a `_FILE` suffix to the environment variable names (for example, `RABBITMQ_DEFAULT_USER_FILE=/run/secrets/xxx` to use [Docker Secrets](https://docs.docker.com/engine/swarm/secrets/)).
136-
137-
### Setting default vhost
138-
139-
If you wish to change the default vhost, you can do so with the `RABBITMQ_DEFAULT_VHOST` environmental variables:
140-
141-
```console
142-
$ docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost %%IMAGE%%:3-management
143-
```
144-
145-
### Enabling HiPE (deprecated)
146-
147-
**Note**: HiPE is disabled since version 3.7.15 of rabbimq images (https://github.com/docker-library/rabbitmq/pull/340)
148-
149-
See the [RabbitMQ "Configuration"](http://www.rabbitmq.com/configure.html#config-items) for more information about various configuration options.
150-
151-
For enabling the HiPE compiler on startup use `RABBITMQ_HIPE_COMPILE` set to `1`. According to the official documentation:
152-
153-
> Set to true to precompile parts of RabbitMQ with HiPE, a just-in-time compiler for Erlang. This will increase server throughput at the cost of increased startup time. You might see 20-50% better performance at the cost of a few minutes delay at startup.
154-
155-
It is therefore important to take that startup delay into consideration when configuring health checks, automated clustering etc.
156-
15795
### Enabling Plugins
15896

15997
Creating a Dockerfile will have them enabled at runtime. To see the full list of plugins present on the image `rabbitmq-plugins list`
16098

16199
```Dockerfile
162-
FROM rabbitmq:3.7-management
100+
FROM rabbitmq:3.8-management
163101
RUN rabbitmq-plugins enable --offline rabbitmq_mqtt rabbitmq_federation_management rabbitmq_stomp
164102
```
165103

@@ -173,12 +111,10 @@ Example `enabled_plugins`
173111

174112
### Additional Configuration
175113

176-
If additional configuration is required, it is recommended to supply an appropriate `/etc/rabbitmq/rabbitmq.conf` file (see [the "Configuration File(s)" section of the RabbitMQ documentation for more details](https://www.rabbitmq.com/configure.html#configuration-files)), for example via bind-mount, [Docker Configs](https://docs.docker.com/engine/swarm/configs/), or a short `Dockerfile` with a `COPY` instruction.
114+
If configuration is required, it is recommended to supply an appropriate `/etc/rabbitmq/rabbitmq.conf` file (see [the "Configuration File(s)" section of the RabbitMQ documentation for more details](https://www.rabbitmq.com/configure.html#configuration-files)), for example via bind-mount, [Docker Configs](https://docs.docker.com/engine/swarm/configs/), or a short `Dockerfile` with a `COPY` instruction.
177115

178116
Alternatively, it is possible to use the `RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS` environment variable, whose syntax is described [in section 7.8 ("Configuring an Application") of the Erlang OTP Design Principles User's Guide](http://erlang.org/doc/design_principles/applications.html#id81887) (the appropriate value for `-ApplName` is `-rabbit`), this method requires a slightly different reproduction of its equivalent entry in `rabbitmq.conf`. For example, configuring [`channel_max`](https://www.rabbitmq.com/configure.html#config-items) would look something like `-e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-rabbit channel_max 4007"`. Where the space between the variable `channel_max` and its value `4007` correctly becomes a comma when translated in the environment.
179117

180-
Additional configuration keys would be specified as a list. For example, configuring both [`channel_max`](https://www.rabbitmq.com/configure.html#config-items) and [`auth_backends`](https://www.rabbitmq.com/ldap.html#overview) would look something like `-e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-rabbit channel_max 4007 auth_backends [rabbit_auth_backend_ldap,rabbit_auth_backend_internal]"`. Note that some variables such as for `auth_backends` require their value(s) to be enclosed in brackets, and for multiple values explicitly including the comma as a delimiter.
181-
182118
### Health/Liveness/Readiness Checking
183119

184120
See [the "Official Images" FAQ](https://github.com/docker-library/faq#healthcheck) and [the discussion on docker-library/rabbitmq#174 (especially the large comment by Michael Klishin from RabbitMQ upstream)](https://github.com/docker-library/rabbitmq/pull/174#issuecomment-452002696) for a detailed explanation of why this image does not come with a default `HEALTHCHECK` defined, and for suggestions for implementing your own health/liveness/readiness checks.

0 commit comments

Comments
 (0)