EDITAR:desde el 23 de julio de 2015
La imagen acoplable oficial de postgres ejecutará .sql
scripts encontrados en /docker-entrypoint-initdb.d/
carpeta.
Entonces, todo lo que necesita es crear el siguiente script sql:
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
y agréguelo en su Dockerfile:
Dockerfile
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/
Pero desde el 8 de julio de 2015, si todo lo que necesita es crear un usuario y una base de datos , es más fácil usar el POSTGRES_USER
, POSTGRES_PASSWORD
y POSTGRES_DB
variables de entorno:
docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
o con un Dockerfile:
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
para imágenes anteriores al 23 de julio de 2015
De la documentación de la imagen Docker de postgres, se dice que
[...] obtendrá cualquier script *.sh que se encuentre en ese directorio [/docker-entrypoint-initdb.d
] para realizar más inicializaciones antes de iniciar el servicio
Lo importante aquí es "antes de iniciar el servicio" . Esto significa que su secuencia de comandos make_db.sh se ejecutará antes de que se inicie el servicio de postgres, por lo que aparece el mensaje de error "no se pudo conectar a la base de datos de postgres" .
Después de eso, hay otra información útil:
Si necesita ejecutar comandos SQL como parte de su inicialización, se recomienda encarecidamente el uso del modo de usuario único de Postgres.
De acuerdo, esto puede ser un poco misterioso a primera vista. Lo que dice es que su secuencia de comandos de inicialización debe iniciar el servicio postgres en modo único antes de realizar sus acciones. Entonces podrías cambiar tu make_db.ksh script de la siguiente manera y debería acercarte más a lo que quieres:
NOTA , esto ha cambiado recientemente en la siguiente confirmación. Esto funcionará con el último cambio:
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
Anteriormente, el uso de --single
se requería el modo:
gosu postgres postgres --single <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL