Skip to content

Immich PostgreSQL

Description / nameInput element
Container Registry
Container Configuration Root Path
Immich PostgreSQL Host Port
Immich PostgreSQL /var/lib/postgresql/data Path

Build Status Last Commit sysvipc Required

PostgreSQL with pgvector and vectorchord extensions required by Immich for vector similarity search. Defaults to PostgreSQL 14 (:latest), PostgreSQL 18 available as :18.

Port 5432
Registry ghcr.io/daemonless/immich-postgres
Daemonless daemonless/immich-postgres
Source immich-app/immich
Website immich.app

Version Tags

Tag Description Best For
14 / 14-pkg / latest Upstream Binary. Built from official release. Most users. Matches Linux Docker behavior.
18 / 18-pkg Upstream Binary. Built from official release. Alternative build.

Root Privileges Required

Podman on FreeBSD currently requires root. All commands must be run as root (or via doas/sudo).

Before deploying, ensure your host environment is ready. See the Quick Start Guide for host setup instructions.

Deployment

services:
  immich-postgres:
    image: ghcr.io/daemonless/immich-postgres:latest
    container_name: immich-postgres
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=immich
    volumes:
      - "/path/to/containers/immich-postgres/var/lib/postgresql/data:/var/lib/postgresql/data"
    ports:
      - 5432:5432
    annotations:
      org.freebsd.jail.allow.sysvipc: "true"
    restart: unless-stopped
DIRECTOR_PROJECT=immich-postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=immich
options:
  - virtualnet: ':<random> default'
  - nat:
services:
  immich-postgres:
    name: immich_postgres
    options:
      - container: 'boot args:--pull'
      - template: !ENV '${PWD}/immich-postgres.conf'
    oci:
      user: root
      environment:
        - POSTGRES_USER: !ENV '${POSTGRES_USER}'
        - POSTGRES_PASSWORD: !ENV '${POSTGRES_PASSWORD}'
        - POSTGRES_DB: !ENV '${POSTGRES_DB}'
    volumes:
      - IMMICH_POSTGRES_VAR_LIB_POSTGRESQL_DATA_PATH: /var/lib/postgresql/data
volumes:
  IMMICH_POSTGRES_VAR_LIB_POSTGRESQL_DATA_PATH:
    device: '/path/to/containers/immich-postgres/var/lib/postgresql/data'
ARG tag=latest

OPTION overwrite=force
OPTION from=ghcr.io/daemonless/immich-postgres:${tag}
SET allow.sysvipc=1
podman run -d --name immich-postgres \
  -p 5432:5432 \
  --annotation 'org.freebsd.jail.allow.sysvipc=true' \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=postgres \
  -e POSTGRES_DB=immich \
  -v /path/to/containers/immich-postgres/var/lib/postgresql/data:/var/lib/postgresql/data \
  ghcr.io/daemonless/immich-postgres:latest
- name: Deploy immich-postgres
  containers.podman.podman_container:
    name: immich-postgres
    image: ghcr.io/daemonless/immich-postgres:latest
    state: started
    restart_policy: always
    env:
      POSTGRES_USER: "postgres"
      POSTGRES_PASSWORD: "postgres"
      POSTGRES_DB: "immich"
    ports:
      - "5432:5432"
    volumes:
      - "/path/to/containers/immich-postgres/var/lib/postgresql/data:/var/lib/postgresql/data"
    annotation:
      org.freebsd.jail.allow.sysvipc: "true"

Interactive Configuration

Parameters

Environment Variables

Variable Default Description
POSTGRES_USER postgres Database superuser (default: postgres)
POSTGRES_PASSWORD postgres Database password (default: postgres)
POSTGRES_DB immich Database name (default: immich)

Volumes

Path Description
/var/lib/postgresql/data Database data directory

Ports

Port Protocol Description
5432 TCP PostgreSQL Port

This image is part of the Immich Stack.

PostgreSQL version: :latest and :14 use PostgreSQL 14. :18 uses PostgreSQL 18. New installations should consider :18. If you are migrating an existing Immich instance, stay on :14 — PostgreSQL major version upgrades require a full pg_dumpall and restore. The default :latest tag will follow whatever version Immich recommends upstream.

PostgreSQL requires allow.sysvipc for shared memory. Create immich-postgres.conf alongside appjail-director.yml:

exec.start: "/bin/sh /etc/rc"
exec.stop: "/bin/sh /etc/rc.shutdown jail"
mount.devfs
persist
allow.sysvipc

Implementation Details

  • Architectures: amd64
  • User: postgres (UID/GID set via PUID/PGID). Defaults to 1000:1000.
  • Base: Built on ghcr.io/daemonless/base (FreeBSD 15.0).
  • sysvipc: Requires --annotation 'org.freebsd.jail.allow.sysvipc=true' (ocijail 0.5.0+)

Need help? Join our Discord community.