sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man skapar en användare/databas i skript för Docker Postgres

REDIGERA – sedan 23 juli 2015

Den officiella postgres docker-bilden kommer att köra .sql skript som finns i /docker-entrypoint-initdb.d/ mapp.

Så allt du behöver är att skapa följande sql-skript:

init.sql

CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;

och lägg till den i din Dockerfile:

Dockerfil

FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/

Men sedan den 8 juli 2015, om allt du behöver är att skapa en användare och databas , det är lättare att bara använda POSTGRES_USER , POSTGRES_PASSWORD och POSTGRES_DB miljövariabler:

docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres

eller med en Dockerfil:

FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker

för bilder äldre än 23 juli 2015

Från dokumentationen av postgres Docker-bilden sägs det att

[...] kommer det att hämta alla *.sh-skript som finns i den katalogen [/docker-entrypoint-initdb.d ] för att göra ytterligare initiering innan du startar tjänsten

Det som är viktigt här är "innan du startar tjänsten" . Det betyder att ditt skript make_db.sh kommer att köras innan postgres-tjänsten skulle startas, därför felmeddelandet "kunde inte ansluta till databasen postgres" .

Efter det finns det ytterligare en användbar information:

Om du behöver utföra SQL-kommandon som en del av din initiering, rekommenderas användningen av Postgres enanvändarläge starkt.

Håller med om att detta kan vara lite mystiskt vid första titt. Vad det står är att ditt initialiseringsskript ska starta postgres-tjänsten i singelläge innan du gör dess åtgärder. Så du kan ändra din make_db.ksh skript enligt följande och det borde komma dig närmare vad du vill:

OBS , detta har nyligen ändrats i följande commit. Detta kommer att fungera med den senaste ändringen:

export PGUSER=postgres
psql <<- EOSQL
    CREATE USER docker;
    CREATE DATABASE docker;
    GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL

Tidigare användes --single läge krävdes:

gosu postgres postgres --single <<- EOSQL
    CREATE USER docker;
    CREATE DATABASE docker;
    GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL


  1. Fel 28000:Inloggning misslyckades för användaren DOMAIN\\user med pyodbc

  2. MySQL ACOS() Funktion – Returnera bågcosinus för ett tal

  3. MySQL Cross Server Select Query

  4. Få den sista dagen i månaden i SQL