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 |
| Source | https://github.com/immich-app/immich |
| Website | https://immich.app/ |
| Tag | Description | Best For |
|---|---|---|
14 / latest |
Upstream Binary. Built from official release. | Most users. Matches Linux Docker behavior. |
18 |
Upstream Binary. Built from official release. | Alternative build. |
Before deploying, ensure your host environment is ready. See the Quick Start Guide for host setup instructions.
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.env:
DIRECTOR_PROJECT=immich-postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=immich
appjail-director.yml:
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: /var/lib/postgresql/data
volumes:
immich-postgres_var_lib_postgresql_data:
device: '/path/to/containers/immich-postgres/var/lib/postgresql/data'Makejail:
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"Access at: http://localhost:5432
| Variable | Default | Description |
|---|---|---|
POSTGRES_USER |
postgres |
Database superuser (default: postgres) |
POSTGRES_PASSWORD |
postgres |
Database password (default: postgres) |
POSTGRES_DB |
immich |
Database name (default: immich) |
| Path | Description |
|---|---|
/var/lib/postgresql/data |
Database data directory |
| 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
Architectures: amd64
User: postgres (UID/GID via PUID/PGID, defaults to 1000:1000)
Base: FreeBSD 15.0
Need help? Join our Discord community.