mirror of
https://github.com/dragonflydb/dragonfly
synced 2024-11-21 23:19:53 +00:00
cec3659b51
Fixes #2917 The problem is described in this "working as intended" issue https://github.com/moby/moby/issues/3124 So the advised approach of using "USER dfly" directive does not really work because it requires that the host will also define 'dfly' user with the same id. It's unrealistic expectation. Therefore, we revert the fix done in #1775 and follow valkey approach: https://github.com/valkey-io/valkey-container/blob/mainline/docker-entrypoint.sh#L12 1. we run the entrypoint in the container as root which later spawns the dragonfly process 2. if we run as root: a. we chmod files under /data to dfly. b. use setpriv to exec ourselves as dfly. 3. if we do not run as root we execute the docker command. So even though the process starts as root, the server runs as dfly and only the bootstrap part has elevated permissions is used to fix the volume access. While we are at it, we also switched to setpriv following the change of https://github.com/valkey-io/valkey-container/pull/24/files Signed-off-by: Roman Gershman <roman@dragonflydb.io>
39 lines
961 B
Docker
39 lines
961 B
Docker
# syntax=docker/dockerfile:1
|
|
FROM ghcr.io/romange/ubuntu-dev:20 as builder
|
|
|
|
WORKDIR /build
|
|
|
|
COPY ./Makefile ./CMakeLists.txt ./
|
|
COPY src ./src
|
|
COPY cmake ./cmake
|
|
COPY helio ./helio
|
|
|
|
RUN make release
|
|
|
|
RUN build-release/dragonfly --version
|
|
|
|
FROM ubuntu:22.04
|
|
|
|
RUN --mount=type=tmpfs,target=/var/cache/apt \
|
|
--mount=type=tmpfs,target=/var/lib/apt/lists \
|
|
apt update && \
|
|
apt install -q -y --no-install-recommends netcat-openbsd ca-certificates redis-tools net-tools
|
|
|
|
RUN groupadd -r -g 999 dfly && useradd -r -g dfly -u 999 dfly
|
|
RUN mkdir /data && chown dfly:dfly /data
|
|
|
|
VOLUME /data
|
|
WORKDIR /data
|
|
|
|
COPY tools/docker/entrypoint.sh /usr/local/bin/entrypoint.sh
|
|
COPY tools/docker/healthcheck.sh /usr/local/bin/healthcheck.sh
|
|
COPY --from=builder /build/build-release/dragonfly /usr/local/bin/
|
|
|
|
HEALTHCHECK CMD /usr/local/bin/healthcheck.sh
|
|
ENTRYPOINT ["entrypoint.sh"]
|
|
|
|
# For inter-container communication.
|
|
EXPOSE 6379
|
|
|
|
CMD ["dragonfly", "--logtostderr"]
|