Tengo el siguiente archivo docker-compose:
version: '3.5' services: postgres: container_name: postgres_container image: postgres environment: POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme} PGDATA: /data/postgres volumes: - postgres:/data/postgres onrun: psql -h=localhost -P=${POSTGRES_PASSWORD} -U=${POSTGRES_USER} -tc "SELECT 1 FROM pg_database WHERE datname = 'premiership'" | grep -q 1 || psql -h=localhost -P=${POSTGRES_PASSWORD}-U=${POSTGRES_USER}c "CREATE DATABASE premiership" ports: - "5432:5432" networks: - postgres restart: unless-stoppedLo anterior no funciona porque no hay onrun en los servicios docker-compose.
Todo lo que quiero hacer es crear una base de datos si no existe, pero esto es increíblemente difícil porque no sé cuándo está activo el servicio.
Además, no es fácil hacer esto en postgres. Intenté mapear un volumen para que se ejecutara un initdb.sql:
volumes: - postgres:/data/postgres - ./initdb/1_schema.sql:/docker-entrypoint-initdb.d/1_schema.sql1_schema.sql se ve así:
SELECT datname FROM pg_database WHERE datname='premiership''; IF datname=' premiership' THEN CREATE DATABASE premiership PASSWORD 'test'; END IF; La base de datos no se crea y cuando ejecuto docker-compose logs no veo nada sobre la ejecución del script.
¿Ha intentado configurar la variable POSTGRES_DB en su entorno docker-compose.yml ?
image: postgres environment: POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme} POSTGRES_DB: premiership PGDATA: /data/postgres volumes:ver https://hub.docker.com/_/postgres :
POSTGRES_DBEsta variable de entorno opcional se puede utilizar para definir un nombre diferente para la base de datos predeterminada que se crea cuando se inicia la imagen por primera vez. Si no se especifica, se utilizará el valor de
POSTGRES_USER.