a year 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
a year ago
please add more context
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
a year ago
railway services can not have two volumes
a year ago
your dockerfile would need to copy the docker-entrypoint-initdb.d file into the applicable location
a year 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
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?
a year ago
you are correct, volumes are the only way to persist files on disk
a year ago
can you add some more context though? what does docker-entrypoint-initdb.d do?
Just creates some tables and sets up permissions. I only need it on the original creation of the DB
a year ago
then yeah, copy it into the correct location, and then wipe the volume to allow it to run again