PostgreSQL Docker image with PGroonga (full-text search) and pgvector (vector similarity) preinstalled.
Built from the official postgres image and Debian/PGDG extension packages.
| Registry | Image |
|---|---|
| GHCR | ghcr.io/cubeplexai/postgresql-pgroonga-pgvector |
| Docker Hub | cubeplex/postgresql-pgroonga-pgvector |
Docker Hub full description is maintained in docker-hub-readme.md and synced by CI.
| Tag | Meaning |
|---|---|
latest |
Latest build from main |
18.4 |
Postgres patch version (digest pin in versions.env is not part of the tag) |
18 |
Postgres major |
18.4-pgroongaX.Y.Z-pgvectorA.B.C |
Full stack pin (extension package versions at build time) |
sha-<short> |
Git commit |
v* |
Git tag (when present) |
Example:
cubeplex/postgresql-pgroonga-pgvector:18.4
cubeplex/postgresql-pgroonga-pgvector:18.4-pgroonga4.0.8-pgvector0.8.6
docker run --rm -e POSTGRES_PASSWORD=postgres -p 5432:5432 \
ghcr.io/cubeplexai/postgresql-pgroonga-pgvector:latestEnable extensions in a database:
CREATE EXTENSION IF NOT EXISTS pgroonga;
CREATE EXTENSION IF NOT EXISTS vector;Or with Compose:
docker compose up -d# optional: edit versions.env first
set -a && source ./versions.env && set +a
docker build \
--build-arg POSTGRES_IMAGE="${POSTGRES_IMAGE}" \
--build-arg PG_MAJOR="${PG_MAJOR}" \
-t postgresql-pgroonga-pgvector:local ..github/workflows/build-push.yml builds multi-arch images (linux/amd64, linux/arm64) and pushes to GHCR and Docker Hub.
| Event | Behavior |
|---|---|
| PR (Dockerfile / versions / workflow) | Build amd64 only (no push) |
Push to main |
Multi-arch build + push |
Tag v* |
Multi-arch build + push |
workflow_dispatch |
Optional push; platforms configurable |
.github/workflows/check-upstream.yml runs daily (and on demand):
- Looks up the latest official
postgres:<PG_MAJOR>.Ntag (Docker Hub, with fallback to docker-library/official-images). - Resolves the multi-arch digest.
- If tag or digest differs from
versions.env, commits
POSTGRES_IMAGE=postgres:X.Y@sha256:…directly tomain(no PR). - Explicitly dispatches
build-push.yml(GitHub does not start other workflows from aGITHUB_TOKENpush — recursion guard).
PG_MAJOR is not auto-advanced (major upgrades stay manual).
# Manual run
gh workflow run check-upstream.yml -R cubeplexai/postgresql-pgroonga-pgvector| Secret | Purpose |
|---|---|
DOCKERHUB_TOKEN |
Docker Hub access token. Org-level secret is fine for public repos. |
Token scopes:
| Scope | Image push | Hub README / short description |
|---|---|---|
| Read & Write | yes | no (API returns 403 Forbidden) |
| Read, Write, Delete | yes | yes |
If description sync fails with Forbidden, recreate the PAT with Read, Write, Delete, update org secret DOCKERHUB_TOKEN, then re-run Update Docker Hub README.
GHCR uses the built-in GITHUB_TOKEN (packages: write).
| Name | Default | Purpose |
|---|---|---|
DOCKERHUB_USERNAME (var or secret) |
cubeplex |
Docker Hub login username (not the GitHub org cubeplexai) |
DOCKERHUB_NAMESPACE (var) |
cubeplex |
Docker Hub image namespace |
docker-hub-readme.md is synced to hub.docker.com/r/cubeplex/postgresql-pgroonga-pgvector by .github/workflows/dockerhub-readme.yml.
Patch releases (automatic): leave it to Check upstream Postgres — or run that workflow manually.
Major line (manual):
- Edit
versions.env: setPG_MAJORandPOSTGRES_IMAGE(e.g.postgres:19.0). - Push to
main(or run Build and push image). - CI installs current PGroonga/pgvector packages, discovers versions, and publishes the composite tag.
Same as PostgreSQL and the packaged extensions (see upstream licenses).