docker-entrypoint.sh 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #!/usr/bin/env bash
  2. ## EMQX docker image start script
  3. if [[ -n "$DEBUG" ]]; then
  4. set -ex
  5. else
  6. set -e
  7. fi
  8. shopt -s nullglob
  9. ## Local IP address setting
  10. LOCAL_IP=$(hostname -i | grep -oE '((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])\.){3}(25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])' | head -n 1)
  11. export EMQX_NAME="${EMQX_NAME:-emqx}"
  12. ## EMQX_NODE_NAME or EMQX_NODE__NAME to indicate the full node name to be used by EMQX
  13. ## If both are set EMQX_NODE_NAME takes higher precedence than EMQX_NODE__NAME
  14. if [[ -z "${EMQX_NODE_NAME:-}" ]] && [[ -z "${EMQX_NODE__NAME:-}" ]]; then
  15. # No node name is provide from environment variables
  16. # try to resolve from other settings
  17. if [[ -z "$EMQX_HOST" ]]; then
  18. if [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "dns" ]] && \
  19. [[ "$EMQX_CLUSTER__DNS__RECORD_TYPE" == "srv" ]] && \
  20. grep -q "$(hostname).$EMQX_CLUSTER__DNS__NAME" /etc/hosts; then
  21. EMQX_HOST="$(hostname).$EMQX_CLUSTER__DNS__NAME"
  22. elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \
  23. [[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == "dns" ]] && \
  24. [[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then
  25. EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-"pod.cluster.local"}
  26. EMQX_HOST="${LOCAL_IP//./-}.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX"
  27. elif [[ "$EMQX_CLUSTER__DISCOVERY_STRATEGY" == "k8s" ]] && \
  28. [[ "$EMQX_CLUSTER__K8S__ADDRESS_TYPE" == 'hostname' ]] && \
  29. [[ -n "$EMQX_CLUSTER__K8S__NAMESPACE" ]]; then
  30. EMQX_CLUSTER__K8S__SUFFIX=${EMQX_CLUSTER__K8S__SUFFIX:-'svc.cluster.local'}
  31. EMQX_HOST=$(grep -h "^$LOCAL_IP" /etc/hosts | grep -o "$(hostname).*.$EMQX_CLUSTER__K8S__NAMESPACE.$EMQX_CLUSTER__K8S__SUFFIX")
  32. else
  33. EMQX_HOST="$LOCAL_IP"
  34. fi
  35. export EMQX_HOST
  36. fi
  37. export EMQX_NODE_NAME="$EMQX_NAME@$EMQX_HOST"
  38. fi
  39. # The default rpc port discovery 'stateless' is mostly for clusters
  40. # having static node names. So it's troulbe-free for multiple emqx nodes
  41. # running on the same host.
  42. # When start emqx in docker, it's mostly one emqx node in one container
  43. # i.e. use port 5369 (or per tcp_server_port | ssl_server_port config) for gen_rpc
  44. export EMQX_RPC__PORT_DISCOVERY="${EMQX_RPC__PORT_DISCOVERY:-manual}"
  45. exec "$@"