PostgreSQL Custom Docker Image With Volume Entrypoint Questions

AnonymousTRIAL

10 months ago

Hello, I have a Docker Image for PSQL with a volume attatched to that service that I am trying to run, on initial startup however, I get the following: PostgreSQL Database directory appears to contain a database; Skipping initialization. How can I have a volume attached but still get this to run? Thanks!

0 Replies

AnonymousTRIAL

10 months ago

b2136db9-ae75-4237-ac77-4e079154cc94


10 months ago

please add more context


AnonymousTRIAL

10 months ago

Dockerfile:

FROM pgvector/pgvector:pg16
RUN apt-get update && apt-get install -y postgis postgresql-16-postgis-3

Docker Compose:

version: '3.1'

services:
  db:
    image: postgis_and_pg_vector:latest
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      RAG_USER_PASSWORD: ${RAG_USER_PASSWORD}
      PGDATA: ${PGDATA}
    ports:
      - "5432:5432"
    volumes:
      - ./init:/docker-entrypoint-initdb.d
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

Volume is mounted at /var/lib/postgresql/data
PGDATA is currently set at /var/lib/postgresql/data/pgdata


10 months ago

railway services can not have two volumes


AnonymousTRIAL

10 months ago

Gotcha


AnonymousTRIAL

10 months ago

What approach would you recommend here?


10 months ago

your dockerfile would need to copy the docker-entrypoint-initdb.d file into the applicable location


AnonymousTRIAL

10 months ago

Okay makes sense, thanks!


10 months ago

but even so, its a init script and will not be ran on every redeploy, it will only be ran if there is an empty data volume


AnonymousTRIAL

10 months ago

Yeah that's fine. I'm assuming adding a volume is the only way to persist data in a Railway service? Or will it do it by default?


10 months ago

you are correct, volumes are the only way to persist files on disk


10 months ago

can you add some more context though? what does docker-entrypoint-initdb.d do?


AnonymousTRIAL

10 months ago

Just creates some tables and sets up permissions. I only need it on the original creation of the DB


10 months ago

then yeah, copy it into the correct location, and then wipe the volume to allow it to run again