Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

413
Vistas
crear una base de datos de postgres si no existe en el inicio de docker-compose

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-stopped

Lo 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.sql

1_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.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

¿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_DB

Esta 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 .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda