Merge pull request #10027 from zmstone/0224-fix-docker-entrypoint-env-overrides
0224 fix docker entrypoint env overrides
This commit is contained in:
commit
ceec7e9707
|
@ -0,0 +1,2 @@
|
|||
Allow setting node name from `EMQX_NODE__NAME` when running in docker.
|
||||
Prior to this fix, only `EMQX_NODE_NAME` is allowed.
|
|
@ -0,0 +1,2 @@
|
|||
在 docker 中启动时,允许使用 `EMQX_NODE__NAME` 环境变量来配置节点名。
|
||||
在此修复前,只能使 `EMQX_NODE_NAME`。
|
|
@ -50,48 +50,41 @@ The EMQX broker runs as Linux user `emqx` in the docker container.
|
|||
|
||||
All EMQX Configuration in [`etc/emqx.conf`](https://github.com/emqx/emqx/blob/master/apps/emqx/etc/emqx.conf) can be configured via environment variables.
|
||||
|
||||
By default, the environment variables with `EMQX_` prefix are mapped to key-value pairs in configuration files.
|
||||
|
||||
You can change the prefix by overriding `HOCON_ENV_OVERRIDE_PREFIX`.
|
||||
The environment variables with `EMQX_` prefix are mapped to key-value pairs in configuration files.
|
||||
|
||||
Example:
|
||||
|
||||
```bash
|
||||
EMQX_LISTENERS__SSL__DEFAULT__ACCEPTORS <--> listeners.ssl.default.acceptors
|
||||
EMQX_ZONES__DEFAULT__MQTT__MAX_PACKET_SIZE <--> zones.default.mqtt.max_packet_size
|
||||
EMQX_DASHBOARD__DEFAULT_PASSWORD <--> dashboard.default_password
|
||||
EMQX_NODE__COOKIE <--> node.cookie
|
||||
EMQX_LISTENERS__SSL__default__ENABLE <--> listeners.ssl.default.enable
|
||||
```
|
||||
|
||||
+ Prefix `EMQX_` is removed
|
||||
+ All upper case letters is replaced with lower case letters
|
||||
+ `__` is replaced with `.`
|
||||
|
||||
If `HOCON_ENV_OVERRIDE_PREFIX=DEV_` is set:
|
||||
|
||||
```bash
|
||||
DEV_LISTENER__SSL__EXTERNAL__ACCEPTORS <--> listener.ssl.external.acceptors
|
||||
DEV_MQTT__MAX_PACKET_SIZE <--> mqtt.max_packet_size
|
||||
DEV_LISTENERS__TCP__DEFAULT__BIND <--> listeners.tcp.default.bind
|
||||
```
|
||||
|
||||
For example, set MQTT TCP port to 1883
|
||||
|
||||
```console
|
||||
$ docker run -d --name emqx -e DEV_LISTENERS__TCP__DEFAULT__BIND=1883 -p 18083:18083 -p 1883:1883 emqx/emqx:latest
|
||||
$ docker run -d --name emqx -e EMQX_DASHBOARD__DEFAULT_PASSWORD=mysecret -p 18083:18083 -p 1883:1883 emqx/emqx:latest
|
||||
```
|
||||
|
||||
Please read more about EMQX configuration in the [official documentation](https://www.emqx.io/docs/en/v5.0/admin/cfg.html).
|
||||
Please read more about EMQX configuration in the [official documentation](https://www.emqx.io/docs/en/v5.0/configuration/configuration.html)
|
||||
|
||||
#### EMQX node name configuration
|
||||
|
||||
| Options | Default | Mapped | Description |
|
||||
| ---------------------------| ------------------ | ------------------------- | ------------------------------------- |
|
||||
| `EMQX_NAME` | container name | none | EMQX node short name |
|
||||
| `EMQX_HOST` | container IP | none | EMQX node host, IP or FQDN |
|
||||
A node name consists of two parts, `EMQX_NAME` part and `EMQX_HOST` part connected by a the symbol `@`. For example: `emqx@127.0.0.1`.
|
||||
|
||||
These environment variables are used during container startup phase only in [docker-entrypoint.sh](./docker-entrypoint.sh).
|
||||
Environment variables `EMQX_NODE_NAME` or `EMQX_NODE__NAME` can be used to set a EMQX node name.
|
||||
If neither of them is set, EMQX will resolve its node name from the running environment or other environment varialbes used for node discovery.
|
||||
|
||||
If `EMQX_NAME` and `EMQX_HOST` are set, and `EMQX_NODE_NAME` is not set, `EMQX_NODE_NAME=$EMQX_NAME@$EMQX_HOST`.
|
||||
Otherwise `EMQX_NODE_NAME` is taken verbatim.
|
||||
When running in docker, by default, `EMQX_NAME` and `EMQX_HOST` are resolved as below:
|
||||
|
||||
| Options | Default | Description |
|
||||
| -------------| --------------- | -----------------------------|
|
||||
| `EMQX_NAME` | container name | EMQX node short name |
|
||||
| `EMQX_HOST` | container IP | EMQX node host, IP or FQDN |
|
||||
|
||||
### Cluster
|
||||
|
||||
|
@ -108,8 +101,7 @@ Let's create a static node list cluster from docker-compose.
|
|||
emqx1:
|
||||
image: emqx/emqx:latest
|
||||
environment:
|
||||
- "EMQX_NAME=emqx"
|
||||
- "EMQX_HOST=node1.emqx.io"
|
||||
- "EMQX_NODE_NAME=emqx@node1.emqx.io"
|
||||
- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
|
||||
- "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io, emqx@node2.emqx.io]"
|
||||
networks:
|
||||
|
@ -120,8 +112,7 @@ Let's create a static node list cluster from docker-compose.
|
|||
emqx2:
|
||||
image: emqx/emqx:latest
|
||||
environment:
|
||||
- "EMQX_NAME=emqx"
|
||||
- "EMQX_HOST=node2.emqx.io"
|
||||
- "EMQX_NODE_NAME=emqx@node2.emqx.io"
|
||||
- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
|
||||
- "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io, emqx@node2.emqx.io]"
|
||||
networks:
|
||||
|
@ -174,8 +165,7 @@ services:
|
|||
image: emqx/emqx:latest
|
||||
restart: always
|
||||
environment:
|
||||
EMQX_NAME: foo_emqx
|
||||
EMQX_HOST: 127.0.0.1
|
||||
EMQX_NODE_NAME: foo_emqx@127.0.0.1
|
||||
volumes:
|
||||
- vol-emqx-data:/opt/emqx/data
|
||||
- vol-emqx-etc:/opt/emqx/etc
|
||||
|
|
|
@ -18,28 +18,31 @@ LOCAL_IP=$(hostname -i | grep -oE '((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])\.){3}(
|
|||
|
||||
export EMQX_NAME="${EMQX_NAME:-emqx}"
|
||||
|
||||
if [[ -z "$EMQX_HOST" ]]; then
|
||||
if [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "dns" ]] && \
|
||||
[[ "$EMQX_CLUSTER__DNS__RECORD_TYPE" == "srv" ]] && \
|
||||
grep -q "$(hostname).$EMQX_CLUSTER__DNS__NAME" /etc/hosts; then
|
||||
EMQX_HOST="$(hostname).$EMQX_CLUSTER__DNS__NAME"
|
||||
elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \
|
||||
[[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == "dns" ]] && \
|
||||
[[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then
|
||||
EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-"pod.cluster.local"}
|
||||
EMQX_HOST="${LOCAL_IP//./-}.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX"
|
||||
elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \
|
||||
[[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == 'hostname' ]] && \
|
||||
[[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then
|
||||
EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-'svc.cluster.local'}
|
||||
EMQX_HOST=$(grep -h "^$LOCAL_IP" /etc/hosts | grep -o "$(hostname).*.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX")
|
||||
else
|
||||
EMQX_HOST="$LOCAL_IP"
|
||||
## EMQX_NODE_NAME or EMQX_NODE__NAME to indicate the full node name to be used by EMQX
|
||||
## If both are set EMQX_NODE_NAME takes higher precedence than EMQX_NODE__NAME
|
||||
if [[ -z "${EMQX_NODE_NAME:-}" ]] && [[ -z "${EMQX_NODE__NAME:-}" ]]; then
|
||||
# No node name is provide from environment variables
|
||||
# try to resolve from other settings
|
||||
if [[ -z "$EMQX_HOST" ]]; then
|
||||
if [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "dns" ]] && \
|
||||
[[ "$EMQX_CLUSTER__DNS__RECORD_TYPE" == "srv" ]] && \
|
||||
grep -q "$(hostname).$EMQX_CLUSTER__DNS__NAME" /etc/hosts; then
|
||||
EMQX_HOST="$(hostname).$EMQX_CLUSTER__DNS__NAME"
|
||||
elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \
|
||||
[[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == "dns" ]] && \
|
||||
[[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then
|
||||
EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-"pod.cluster.local"}
|
||||
EMQX_HOST="${LOCAL_IP//./-}.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX"
|
||||
elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \
|
||||
[[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == 'hostname' ]] && \
|
||||
[[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then
|
||||
EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-'svc.cluster.local'}
|
||||
EMQX_HOST=$(grep -h "^$LOCAL_IP" /etc/hosts | grep -o "$(hostname).*.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX")
|
||||
else
|
||||
EMQX_HOST="$LOCAL_IP"
|
||||
fi
|
||||
export EMQX_HOST
|
||||
fi
|
||||
export EMQX_HOST
|
||||
fi
|
||||
|
||||
if [[ -z "$EMQX_NODE_NAME" ]]; then
|
||||
export EMQX_NODE_NAME="$EMQX_NAME@$EMQX_HOST"
|
||||
fi
|
||||
|
||||
|
|
Loading…
Reference in New Issue