emqx/deploy/docker/Dockerfile
Ivan Dyachkov d82f7c3f71 fix: qlc could not create temp files in docker container (#12875)
qlc uses file_sorter that puts temporary files in the working
directory by default, which is not writable by emqx user since
58d0f04056.

One of the consequences is that users cannot access retained messages
from the dashboard, but there are likely other issues as well.

This patch fixes this by making /opt/emqx directory owned by emqx:emqx.
2024-04-16 08:28:46 +02:00

83 lines
2.1 KiB
Docker

ARG BUILD_FROM=ghcr.io/emqx/emqx-builder/5.3-2:1.15.7-26.2.1-2-debian12
ARG RUN_FROM=public.ecr.aws/debian/debian:12-slim
ARG SOURCE_TYPE=src # tgz
FROM ${BUILD_FROM} as builder_src
ONBUILD COPY . /emqx
FROM ${RUN_FROM} as builder_tgz
ARG PROFILE=emqx
ARG PKG_VSN
ARG SUFFIX
ARG TARGETARCH
ONBUILD COPY ${PROFILE}-${PKG_VSN}${SUFFIX}-debian12-$TARGETARCH.tar.gz /${PROFILE}.tar.gz
FROM builder_${SOURCE_TYPE} as builder
ARG PROFILE=emqx
ARG IS_ELIXIR=no
ARG DEBUG=0
ENV EMQX_RELUP=false
ENV EMQX_REL_FORM='docker'
WORKDIR /emqx/
RUN mkdir -p /emqx-rel/emqx && \
if [ -f "/${PROFILE}.tar.gz" ]; then \
tar zxf "/${PROFILE}.tar.gz" -C /emqx-rel/emqx; \
else \
if [ -f rebar-git-cache.tar ]; then \
mkdir .cache && \
tar -xf rebar-git-cache.tar -C .cache && \
export REBAR_GIT_CACHE_DIR='/emqx/.cache' && \
export REBAR_GIT_CACHE_REF_AUTOFILL=0; \
fi && \
export EMQX_REL_PATH="/emqx/_build/${PROFILE}/rel/emqx" && \
git config --global --add safe.directory '*' && \
make ${PROFILE}-tgz && \
tar zxf _packages/${PROFILE}/*.tar.gz -C /emqx-rel/emqx; \
fi
FROM $RUN_FROM
ARG EXTRA_DEPS=''
# Elixir complains if runs without UTF-8
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
COPY deploy/docker/docker-entrypoint.sh /usr/bin/
RUN set -eu; \
apt-get update; \
apt-get install -y --no-install-recommends ca-certificates procps $(echo "${EXTRA_DEPS}" | tr ',' ' '); \
rm -rf /var/lib/apt/lists/*; \
groupadd -r -g 1000 emqx; \
useradd -r -m -u 1000 -g emqx emqx;
COPY --from=builder --chown=emqx:emqx /emqx-rel /opt/
RUN set -eu; \
find /opt/emqx -name 'swagger*.js.map' -exec rm {} +; \
ln -s /opt/emqx/bin/* /usr/local/bin/;
WORKDIR /opt/emqx
USER emqx
VOLUME ["/opt/emqx/log", "/opt/emqx/data"]
# emqx will occupy these port:
# - 1883 port for MQTT
# - 8083 for WebSocket/HTTP
# - 8084 for WSS/HTTPS
# - 8883 port for MQTT(SSL)
# - 18083 for dashboard and API
# - 4370 default Erlang distribution port
# - 5369 for backplane gen_rpc
EXPOSE 1883 8083 8084 8883 18083 4370 5369
ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"]
CMD ["/opt/emqx/bin/emqx", "foreground"]