From 9140eafd94353a8ec3e1307be7385fd6676ff7a9 Mon Sep 17 00:00:00 2001 From: Zaiming Shi Date: Thu, 28 Jan 2021 19:47:51 +0100 Subject: [PATCH] chore(docker): Start emqx in foreground mode in docker container --- .ci/fvt_tests/docker-compose.yaml | 4 +- deploy/docker/Dockerfile | 4 +- deploy/docker/README.md | 5 +-- deploy/docker/docker-entrypoint.sh | 4 -- deploy/docker/start.sh | 62 ------------------------------ 5 files changed, 6 insertions(+), 73 deletions(-) delete mode 100755 deploy/docker/start.sh diff --git a/.ci/fvt_tests/docker-compose.yaml b/.ci/fvt_tests/docker-compose.yaml index 050fd269b..22d48bef7 100644 --- a/.ci/fvt_tests/docker-compose.yaml +++ b/.ci/fvt_tests/docker-compose.yaml @@ -17,7 +17,7 @@ services: - | sed -i "s 127.0.0.1 $$(ip route show |grep "link" |awk '{print $$1}') g" /opt/emqx/etc/acl.conf sed -i '/emqx_telemetry/d' /opt/emqx/data/loaded_plugins - /usr/bin/start.sh + /opt/emqx/bin/emqx foreground healthcheck: test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"] interval: 5s @@ -44,7 +44,7 @@ services: - | sed -i "s 127.0.0.1 $$(ip route show |grep "link" |awk '{print $$1}') g" /opt/emqx/etc/acl.conf sed -i '/emqx_telemetry/d' /opt/emqx/data/loaded_plugins - /usr/bin/start.sh + /opt/emqx/bin/emqx foreground healthcheck: test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"] interval: 5s diff --git a/deploy/docker/Dockerfile b/deploy/docker/Dockerfile index ee02e0ae9..860446b8f 100644 --- a/deploy/docker/Dockerfile +++ b/deploy/docker/Dockerfile @@ -43,7 +43,7 @@ LABEL org.label-schema.docker.dockerfile="Dockerfile" \ ARG QEMU_ARCH=x86_64 ARG EMQX_NAME=emqx -COPY deploy/docker/docker-entrypoint.sh deploy/docker/start.sh tmp/qemu-$QEMU_ARCH-stati* /usr/bin/ +COPY deploy/docker/docker-entrypoint.sh tmp/qemu-$QEMU_ARCH-stati* /usr/bin/ COPY --from=builder /emqx/_build/$EMQX_NAME/rel/emqx /opt/emqx RUN ln -s /opt/emqx/bin/* /usr/local/bin/ @@ -77,4 +77,4 @@ EXPOSE 1883 8081 8083 8084 8883 11883 18083 4369 4370 5369 6369 6370 ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"] -CMD ["/usr/bin/start.sh"] +CMD ["/opt/emqx/bin/emqx", "foreground"] diff --git a/deploy/docker/README.md b/deploy/docker/README.md index 87f17e41c..d0b88331e 100644 --- a/deploy/docker/README.md +++ b/deploy/docker/README.md @@ -69,9 +69,8 @@ These environment variables will ignore for configuration file. | Options | Default | Mapped | Description | | ---------------------------| ------------------ | ------------------------- | ------------------------------------- | -| EMQX_NAME | container name | none | emqx node short name | -| EMQX_HOST | container IP | none | emqx node host, IP or FQDN | -| EMQX_WAIT_TIME | 5 | none | wait time in sec before timeout | +| EMQX_NAME | container name | none | emqx node short name | +| EMQX_HOST | container IP | none | emqx node host, IP or FQDN | The list is incomplete and may changed with [etc/emqx.conf](https://github.com/emqx/emqx/blob/master/etc/emqx.conf) and plugin configuration files. But the mapping rule is similar. diff --git a/deploy/docker/docker-entrypoint.sh b/deploy/docker/docker-entrypoint.sh index 77d40d4fa..dbd117962 100755 --- a/deploy/docker/docker-entrypoint.sh +++ b/deploy/docker/docker-entrypoint.sh @@ -40,10 +40,6 @@ if [[ -z "$EMQX_HOST" ]]; then export EMQX_HOST fi -if [[ -z "$EMQX_WAIT_TIME" ]]; then - export EMQX_WAIT_TIME=5 -fi - if [[ -z "$EMQX_NODE_NAME" ]]; then export EMQX_NODE_NAME="$EMQX_NAME@$EMQX_HOST" fi diff --git a/deploy/docker/start.sh b/deploy/docker/start.sh deleted file mode 100755 index 0964bdf63..000000000 --- a/deploy/docker/start.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/sh -set -e -u - -EMQX_WAIT_TIME=${EMQX_WAIT_TIME:-5} - -emqx_exit(){ - # At least erlang.log.1 exists - if [ -f /opt/emqx/log/erlang.log.1 ]; then - # tail emqx.log.* - erlang_log=$(echo $(ls -t /opt/emqx/log/erlang.log.*) | awk '{print $1}') - num=$(sed -n -e '/LOGGING STARTED/=' ${erlang_log} | tail -1) - [ ! -z $num ] && [ $num -gt 2 ] && tail -n +$(expr $num - 2) ${erlang_log} - fi - - echo "['$(date -u +"%Y-%m-%dT%H:%M:%SZ")']:emqx exit abnormally" - exit 1 -} - -## EMQ Main script - -# When receiving the EXIT signal, execute emqx_exit function -trap "emqx_exit" EXIT - -# Start and run emqx, and when emqx crashed, this container will stop -/opt/emqx/bin/emqx start - -# Sleep 5 seconds to wait for the loaded plugins catch up. -sleep 5 - -echo "['$(date -u +"%Y-%m-%dT%H:%M:%SZ")']:emqx start" - -## Fork tailing erlang.log, the fork is not killed after this script exits -## The assumption is that this is the docker entrypoint, -## hence docker container is terminated after entrypoint exists -tail -f /opt/emqx/log/erlang.log.1 & - -# monitor emqx is running, or the docker must stop to let docker PaaS know -# warning: never use infinite loops such as `` while true; do sleep 1000; done`` here -# you must let user know emqx crashed and stop this container, -# and docker dispatching system can known and restart this container. -IDLE_TIME=0 -MGMT_CONF='/opt/emqx/etc/plugins/emqx_management.conf' -MGMT_PORT=$(sed -n -r '/^management.listener.http[ \t]=[ \t].*$/p' $MGMT_CONF | sed -r 's/^management.listener.http = (.*)$/\1/g') -while [ $IDLE_TIME -lt 5 ]; do - IDLE_TIME=$(expr $IDLE_TIME + 1) - if curl http://localhost:${MGMT_PORT}/status >/dev/null 2>&1; then - IDLE_TIME=0 - # Print the latest erlang.log - now_erlang_log=$(ps -ef |grep "tail -f /opt/emqx/log/erlang.log" |grep -v grep | sed -r "s/.*tail -f (.*)/\1/g") - new_erlang_log="$(ls -t /opt/emqx/log/erlang.log.* | head -1)" - if [ $now_erlang_log != $new_erlang_log ];then - tail -f $new_erlang_log & - kill $(ps -ef |grep "tail -f $now_erlang_log" | grep -v grep | awk '{print $1}') - fi - else - echo "['$(date -u +"%Y-%m-%dT%H:%M:%SZ")']:emqx not running, waiting for recovery in $((25-IDLE_TIME*5)) seconds" - fi - sleep $EMQX_WAIT_TIME -done - -# If running to here (the result 5 times not is running, thus in 25s emqx is not running), exit docker image -# Then the high level PaaS, e.g. docker swarm mode, will know and alert, rebanlance this service