mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 22:12:21 -04:00

PUID and PGID are optional env variables to specify the user and group id of the user that the anki-sync-server process should run with. This gives more flexibility for solving permission problems with volumes and is a common pattern for Docker images (e.g. see here: https://docs.linuxserver.io/general/understanding-puid-and-pgid/) The anki-sync-server process will write any files with the permissions of the user it's running with, which can be a problem when you need to access those files from outside the container or when they are being written into a bind mount that is owned by a particular user on the host system. To be able to implement this the entrypoint.sh needs to run as root (since it needs to create a user and change file permissions). anki-sync-server then needs to be started with the user 'anki', which is why the new dependency 'su-exec' is required. The user 'anki' and group 'anki-group' can no longer be created at image build time because then their ids would be fixed. Also update the build instructions to require building the Docker image inside the directory where the Dockerfile resides since the build now needs to copy the entrypoint.sh and it seems wrong the specify the path docs/syncserver/entrypoint.sh inside the Dockerfile.
44 lines
1.2 KiB
Docker
44 lines
1.2 KiB
Docker
FROM rust:1.83.0-alpine3.20 AS builder
|
|
|
|
ARG ANKI_VERSION
|
|
|
|
RUN apk update && apk add --no-cache build-base protobuf && rm -rf /var/cache/apk/*
|
|
|
|
RUN cargo install --git https://github.com/ankitects/anki.git \
|
|
--tag ${ANKI_VERSION} \
|
|
--root /anki-server \
|
|
anki-sync-server
|
|
|
|
FROM alpine:3.21.0
|
|
|
|
ARG SYNC_PORT=8080
|
|
|
|
# Default PUID and PGID values (can be overridden at runtime). Use these to
|
|
# ensure the files on the volume have the permissions you need.
|
|
ENV PUID=1000
|
|
ENV PGID=1000
|
|
|
|
COPY --from=builder /anki-server/bin/anki-sync-server /usr/local/bin/anki-sync-server
|
|
|
|
RUN apk update && apk add --no-cache bash su-exec && rm -rf /var/cache/apk/*
|
|
|
|
ENV SYNC_PORT=${SYNC_PORT}
|
|
|
|
ENV SYNC_BASE=/anki_data
|
|
|
|
EXPOSE ${SYNC_PORT}
|
|
|
|
COPY entrypoint.sh /entrypoint.sh
|
|
RUN chmod +x /entrypoint.sh
|
|
|
|
ENTRYPOINT ["/entrypoint.sh"]
|
|
CMD ["anki-sync-server"]
|
|
|
|
# This health check will work for Anki versions 24.08.x and newer.
|
|
# For older versions, it may incorrectly report an unhealthy status, which should not be the case.
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
CMD wget -qO- http://127.0.0.1:${SYNC_PORT}/health || exit 1
|
|
|
|
VOLUME /anki_data
|
|
|
|
LABEL maintainer="Jean Khawand <jk@jeankhawand.com>"
|