All checks were successful
🚀 Docker Build and Push / build-and-push (15) (push) Successful in 4m44s
🚀 Docker Build and Push / build-and-push (16) (push) Successful in 4m48s
🚀 Docker Build and Push / build-and-push (17) (push) Successful in 4m47s
🚀 Docker Build and Push / build-and-push (18) (push) Successful in 4m36s
PostgreSQL 18+ Docker images changed the data directory structure to use versioned subdirectories (e.g., /var/lib/postgresql/18/main) instead of the traditional /var/lib/postgresql/data path. Changes: - Dockerfile: Add mkdir and chown to ensure /var/lib/postgresql has correct permissions for the postgres user before volume mount - README.md: Update Quick Start with volume mount example - README.md: Add 'Data Persistence' section explaining PG18+ requirements This fixes the 'mkdir: cannot create directory: Permission denied' error that occurred when mounting volumes at /var/lib/postgresql. See: https://github.com/docker-library/postgres/pull/1259
60 lines
2.5 KiB
Docker
60 lines
2.5 KiB
Docker
# syntax=docker/dockerfile:1
|
|
ARG PG_VERSION=18
|
|
|
|
# =============================================================================
|
|
# Builder stage - Compile TimescaleDB
|
|
# =============================================================================
|
|
FROM tensorchord/vchord-postgres:pg${PG_VERSION}-v1.0.0 AS builder
|
|
|
|
USER root
|
|
|
|
# Install build dependencies
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
git \
|
|
build-essential \
|
|
cmake \
|
|
libssl-dev \
|
|
libkrb5-dev \
|
|
postgresql-server-dev-$PG_MAJOR \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Build TimescaleDB from source (stable release)
|
|
ARG TIMESCALEDB_VERSION=2.24.0
|
|
WORKDIR /build/timescaledb
|
|
RUN git clone --branch ${TIMESCALEDB_VERSION} --depth 1 https://github.com/timescale/timescaledb.git . \
|
|
&& ./bootstrap -DREGRESS_CHECKS=OFF -DWARNINGS_AS_ERRORS=OFF \
|
|
&& cd build && make -j$(nproc) && make install DESTDIR=/tmp/timescaledb
|
|
|
|
# =============================================================================
|
|
# Final stage - Clean runtime image
|
|
# =============================================================================
|
|
FROM tensorchord/vchord-postgres:pg${PG_VERSION}-v1.0.0 AS final
|
|
|
|
# OCI Labels
|
|
LABEL org.opencontainers.image.title="TimescaleDB + VectorChord + pgvector"
|
|
LABEL org.opencontainers.image.description="PostgreSQL with TimescaleDB, VectorChord, and pgvector extensions pre-installed"
|
|
LABEL org.opencontainers.image.source="https://gitea.killinger.fr/maxime.killinger/postgres-ts-vectors"
|
|
LABEL org.opencontainers.image.vendor="Maxime Killinger"
|
|
LABEL org.opencontainers.image.licenses="Apache-2.0"
|
|
LABEL org.opencontainers.image.base.name="tensorchord/vchord-postgres:pg${PG_VERSION}-v1.0.0"
|
|
|
|
# Copy TimescaleDB from builder
|
|
COPY --from=builder /tmp/timescaledb/usr/lib/postgresql/ /usr/lib/postgresql/
|
|
COPY --from=builder /tmp/timescaledb/usr/share/postgresql/ /usr/share/postgresql/
|
|
|
|
# Add init script for auto-extension creation
|
|
COPY init-extensions.sh /docker-entrypoint-initdb.d/
|
|
RUN chmod +x /docker-entrypoint-initdb.d/init-extensions.sh
|
|
|
|
# Add entrypoint wrapper to fix volume permissions at runtime
|
|
COPY docker-entrypoint-wrapper.sh /usr/local/bin/
|
|
RUN chmod +x /usr/local/bin/docker-entrypoint-wrapper.sh
|
|
|
|
# Healthcheck
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=3 \
|
|
CMD pg_isready -U postgres || exit 1
|
|
|
|
# Run as root initially, wrapper will fix permissions then switch to postgres
|
|
ENTRYPOINT ["docker-entrypoint-wrapper.sh"]
|
|
CMD ["postgres", "-c", "shared_preload_libraries=timescaledb,vchord"]
|