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
10 months 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
10 months ago
railway services can not have two volumes
10 months ago
your dockerfile would need to copy the docker-entrypoint-initdb.d file into the applicable location
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
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?
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