Skip to content

Deprecated

This image is no longer actively maintained or built.

Reason: Upstream development has stopped and the repository has been deleted.

Successor

See https://daemonless.io/images/grimmory for an alternative.

BookLore

Description / nameInput element
Container Registry
User ID
Group ID

Build Status Last Commit OCI Pulls

Self-hosted digital library with smart shelves, metadata, OPDS support, and built-in reader.

Registry ghcr.io/daemonless/booklore
Daemonless daemonless/booklore
Source booklore-app/booklore
Website booklore.org

Version Tags

Tag Description Best For
latest Upstream Binary. Built from official release. Most users — recommended.

Parts

Service Image Role
booklore ghcr.io/daemonless/booklore:latest docs
mariadb ghcr.io/daemonless/mariadb:latest docs

Before deploying, ensure your host environment is ready. See the Quick Start Guide for host setup instructions, including the security model for host vs. container privileges.

Deployment

name: booklore

services:
  booklore:
    image: ghcr.io/daemonless/booklore:latest
    container_name: booklore
    network_mode: host
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - SPRING_DATASOURCE_URL=jdbc:mariadb://127.0.0.1:3306/booklore
      - SPRING_DATASOURCE_USERNAME=booklore
      - SPRING_DATASOURCE_PASSWORD=changeme
    volumes:
      - booklore-data:/app/data
      - booklore-books:/books
      - booklore-bookdrop:/bookdrop
    depends_on:
      - mariadb
    restart: unless-stopped

  mariadb:
    image: ghcr.io/daemonless/mariadb:latest
    container_name: booklore-mariadb
    network_mode: host
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - MYSQL_ROOT_PASSWORD=changeme
      - MYSQL_DATABASE=booklore
      - MYSQL_USER=booklore
      - MYSQL_PASSWORD=changeme
    volumes:
      - booklore-mariadb:/config
    restart: unless-stopped

volumes:
  booklore-data:
  booklore-books:
  booklore-bookdrop:
  booklore-mariadb:

Then run podman-compose up -d.

Interactive Configuration

Parameters

Environment Variables

Variable Default Description
PUID 1000
PGID 1000
TZ Etc/UTC
SPRING_DATASOURCE_URL jdbc:mariadb://127.0.0.1:3306/booklore MariaDB JDBC URL (e.g., jdbc:mariadb://mariadb:3306/booklore)
SPRING_DATASOURCE_USERNAME booklore Database username
SPRING_DATASOURCE_PASSWORD changeme Database password
JAVA_OPTS `` Additional JVM options

Volumes

Path Description
/app/data Configuration and application data
/books Book library directory
/bookdrop Drop folder for automatic imports

Networking

This compose uses network_mode: host so services communicate via 127.0.0.1.

For isolated networking (multiple stacks, no port conflicts), use bridge mode with the dnsname CNI plugin:

services:
  booklore:
    # remove network_mode: host, add ports
    ports:
      - "6060:6060"
    environment:
      SPRING_DATASOURCE_URL: "jdbc:mariadb://mariadb:3306/booklore"

  mariadb:
    # remove network_mode: host
    # container name becomes DNS hostname

Migration from Official Image

This image uses /app/data for application data, matching the official ghcr.io/booklore-app/booklore image. You can migrate from Linux to FreeBSD:

  1. Stop containers on source host
  2. Copy /containers/booklore/ (data + mariadb) to destination
  3. Start containers on destination

The MariaDB data format is compatible between Linux and FreeBSD.

Implementation Details

  • Architectures: amd64
  • User: bsd (UID/GID set via PUID/PGID). Defaults to 1000:1000.
  • Base: Built on ghcr.io/daemonless/base (FreeBSD 15.1).

Need help? Join our Discord community.