Ensure data is stored in a volume in anki-sync-server Docker image (#3674)

Otherwise data would be lost by default when removing (or re-creating) a
container.

It would be possible to expose the default directory (e.g.
/home/anki/.syncserver) but it would be different for the two Dockerfiles and
less convenient for users of the Docker container to specify such a long path
when naming their volumes.

Setting the permissions is necessary since anki will be running with 'anki'
user permissions inside the container.
This commit is contained in:
Omar Kohl 2025-01-10 11:42:55 +01:00 committed by GitHub
parent 9460911d90
commit b189820218
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 26 additions and 3 deletions

View file

@ -15,6 +15,8 @@ ARG SYNC_PORT=8080
RUN adduser -D -h /home/anki anki
RUN mkdir -p /anki_data && chown -R anki /anki_data
COPY --from=builder /anki-server/bin/anki-sync-server /usr/local/bin/anki-sync-server
@ -24,6 +26,8 @@ USER anki
ENV SYNC_PORT=${SYNC_PORT}
ENV SYNC_BASE=/anki_data
EXPOSE ${SYNC_PORT}
CMD ["anki-sync-server"]
@ -33,4 +37,6 @@ CMD ["anki-sync-server"]
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>"

View file

@ -17,6 +17,8 @@ COPY --from=builder /anki-server/bin/anki-sync-server /usr/bin/anki-sync-server
ENV SYNC_PORT=${SYNC_PORT}
ENV SYNC_BASE=/anki_data
EXPOSE ${SYNC_PORT}
CMD ["anki-sync-server"]
@ -26,4 +28,6 @@ CMD ["anki-sync-server"]
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD ["anki-sync-server", "--healthcheck"]
VOLUME /anki_data
LABEL maintainer="Jean Khawand <jk@jeankhawand.com>"

View file

@ -38,14 +38,27 @@ Once done with build, you can proceed with running this image with the following
```bash
# this will create anki server
docker run -d -e "SYNC_USER1=admin:admin" -p 8080:8080 --name anki-sync-server anki-sync-server
docker run -d \
-e "SYNC_USER1=admin:admin" \
-p 8080:8080 \
--mount type=volume,src=anki-sync-server-data,dst=/anki_data \
--name anki-sync-server \
anki-sync-server
```
However, if you want to have multiple users, you have to use the following approach:
```bash
# this will create anki server with multiple users
docker run -d -e "SYNC_USER1=test:test" -e "SYNC_USER2=test2:test2" -p 8080:8080 --name anki-sync-server anki-sync-server
docker run -d \
-e "SYNC_USER1=admin:admin" \
-e "SYNC_USER2=admin2:admin2" \
-p 8080:8080 \
--mount type=volume,src=anki-sync-server-data,dst=/anki_data \
--name anki-sync-server \
anki-sync-server
```
Moreover, you can pass additional env vars mentioned [here](https://docs.ankiweb.net/sync-server.html)
Moreover, you can pass additional env vars mentioned
[here](https://docs.ankiweb.net/sync-server.html). Note that you should **not**
override SYNC_BASE because you risk data loss.