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.
|
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.
|
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`.
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
EMQX_LISTENERS__SSL__DEFAULT__ACCEPTORS <--> listeners.ssl.default.acceptors
|
EMQX_DASHBOARD__DEFAULT_PASSWORD <--> dashboard.default_password
|
||||||
EMQX_ZONES__DEFAULT__MQTT__MAX_PACKET_SIZE <--> zones.default.mqtt.max_packet_size
|
EMQX_NODE__COOKIE <--> node.cookie
|
||||||
|
EMQX_LISTENERS__SSL__default__ENABLE <--> listeners.ssl.default.enable
|
||||||
```
|
```
|
||||||
|
|
||||||
+ Prefix `EMQX_` is removed
|
+ Prefix `EMQX_` is removed
|
||||||
+ All upper case letters is replaced with lower case letters
|
+ All upper case letters is replaced with lower case letters
|
||||||
+ `__` is replaced with `.`
|
+ `__` 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
|
For example, set MQTT TCP port to 1883
|
||||||
|
|
||||||
```console
|
```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
|
#### EMQX node name configuration
|
||||||
|
|
||||||
| Options | Default | Mapped | Description |
|
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`.
|
||||||
| ---------------------------| ------------------ | ------------------------- | ------------------------------------- |
|
|
||||||
| `EMQX_NAME` | container name | none | EMQX node short name |
|
|
||||||
| `EMQX_HOST` | container IP | none | EMQX node host, IP or FQDN |
|
|
||||||
|
|
||||||
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`.
|
When running in docker, by default, `EMQX_NAME` and `EMQX_HOST` are resolved as below:
|
||||||
Otherwise `EMQX_NODE_NAME` is taken verbatim.
|
|
||||||
|
| Options | Default | Description |
|
||||||
|
| -------------| --------------- | -----------------------------|
|
||||||
|
| `EMQX_NAME` | container name | EMQX node short name |
|
||||||
|
| `EMQX_HOST` | container IP | EMQX node host, IP or FQDN |
|
||||||
|
|
||||||
### Cluster
|
### Cluster
|
||||||
|
|
||||||
|
@ -108,8 +101,7 @@ Let's create a static node list cluster from docker-compose.
|
||||||
emqx1:
|
emqx1:
|
||||||
image: emqx/emqx:latest
|
image: emqx/emqx:latest
|
||||||
environment:
|
environment:
|
||||||
- "EMQX_NAME=emqx"
|
- "EMQX_NODE_NAME=emqx@node1.emqx.io"
|
||||||
- "EMQX_HOST=node1.emqx.io"
|
|
||||||
- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
|
- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
|
||||||
- "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io, emqx@node2.emqx.io]"
|
- "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io, emqx@node2.emqx.io]"
|
||||||
networks:
|
networks:
|
||||||
|
@ -120,8 +112,7 @@ Let's create a static node list cluster from docker-compose.
|
||||||
emqx2:
|
emqx2:
|
||||||
image: emqx/emqx:latest
|
image: emqx/emqx:latest
|
||||||
environment:
|
environment:
|
||||||
- "EMQX_NAME=emqx"
|
- "EMQX_NODE_NAME=emqx@node2.emqx.io"
|
||||||
- "EMQX_HOST=node2.emqx.io"
|
|
||||||
- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
|
- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
|
||||||
- "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io, emqx@node2.emqx.io]"
|
- "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io, emqx@node2.emqx.io]"
|
||||||
networks:
|
networks:
|
||||||
|
@ -174,8 +165,7 @@ services:
|
||||||
image: emqx/emqx:latest
|
image: emqx/emqx:latest
|
||||||
restart: always
|
restart: always
|
||||||
environment:
|
environment:
|
||||||
EMQX_NAME: foo_emqx
|
EMQX_NODE_NAME: foo_emqx@127.0.0.1
|
||||||
EMQX_HOST: 127.0.0.1
|
|
||||||
volumes:
|
volumes:
|
||||||
- vol-emqx-data:/opt/emqx/data
|
- vol-emqx-data:/opt/emqx/data
|
||||||
- vol-emqx-etc:/opt/emqx/etc
|
- 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}"
|
export EMQX_NAME="${EMQX_NAME:-emqx}"
|
||||||
|
|
||||||
if [[ -z "$EMQX_HOST" ]]; then
|
## EMQX_NODE_NAME or EMQX_NODE__NAME to indicate the full node name to be used by EMQX
|
||||||
if [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "dns" ]] && \
|
## If both are set EMQX_NODE_NAME takes higher precedence than EMQX_NODE__NAME
|
||||||
[[ "$EMQX_CLUSTER__DNS__RECORD_TYPE" == "srv" ]] && \
|
if [[ -z "${EMQX_NODE_NAME:-}" ]] && [[ -z "${EMQX_NODE__NAME:-}" ]]; then
|
||||||
grep -q "$(hostname).$EMQX_CLUSTER__DNS__NAME" /etc/hosts; then
|
# No node name is provide from environment variables
|
||||||
EMQX_HOST="$(hostname).$EMQX_CLUSTER__DNS__NAME"
|
# try to resolve from other settings
|
||||||
elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \
|
if [[ -z "$EMQX_HOST" ]]; then
|
||||||
[[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == "dns" ]] && \
|
if [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "dns" ]] && \
|
||||||
[[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then
|
[[ "$EMQX_CLUSTER__DNS__RECORD_TYPE" == "srv" ]] && \
|
||||||
EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-"pod.cluster.local"}
|
grep -q "$(hostname).$EMQX_CLUSTER__DNS__NAME" /etc/hosts; then
|
||||||
EMQX_HOST="${LOCAL_IP//./-}.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX"
|
EMQX_HOST="$(hostname).$EMQX_CLUSTER__DNS__NAME"
|
||||||
elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \
|
elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \
|
||||||
[[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == 'hostname' ]] && \
|
[[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == "dns" ]] && \
|
||||||
[[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then
|
[[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then
|
||||||
EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-'svc.cluster.local'}
|
EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-"pod.cluster.local"}
|
||||||
EMQX_HOST=$(grep -h "^$LOCAL_IP" /etc/hosts | grep -o "$(hostname).*.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX")
|
EMQX_HOST="${LOCAL_IP//./-}.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX"
|
||||||
else
|
elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \
|
||||||
EMQX_HOST="$LOCAL_IP"
|
[[ "$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
|
fi
|
||||||
export EMQX_HOST
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "$EMQX_NODE_NAME" ]]; then
|
|
||||||
export EMQX_NODE_NAME="$EMQX_NAME@$EMQX_HOST"
|
export EMQX_NODE_NAME="$EMQX_NAME@$EMQX_HOST"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue