편집-2015 년 7 월 23 일부터
공식 포스트 그레스 고정 표시기 이미지 실행 .sql
스크립트는에있는 /docker-entrypoint-initdb.d/
폴더.
따라서 필요한 것은 다음 SQL 스크립트를 작성하는 것입니다.
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
Dockerfile에 추가하십시오.
도커 파일
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/
그러나 2015 년 7 월 8 일 이후 로 사용자와 데이터베이스를 작성 하기 만하면 POSTGRES_USER
, POSTGRES_PASSWORD
및 POSTGRES_DB
환경 변수 를보다 쉽게 사용할 수 있습니다 .
docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
또는 Dockerfile로 :
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
2015 년 7 월 23 일보다 오래된 이미지
에서 postgres의 도커 이미지의 문서 , 그것은 있다고한다
[...] /docker-entrypoint-initdb.d
서비스를 시작하기 전에 추가 초기화를 수행하기 위해 해당 디렉토리 [ ] 에서 찾은 * .sh 스크립트를 소싱합니다.
여기서 중요한 것은 "서비스를 시작하기 전에" 입니다. 이는 postgres 서비스가 시작되기 전에 make_db.sh 스크립트 가 실행되므로 "postgres 데이터베이스에 연결할 수 없습니다" 라는 오류 메시지가 표시 됩니다.
그 후 또 다른 유용한 정보가 있습니다.
초기화의 일부로 SQL 명령을 실행해야하는 경우 Postgres 단일 사용자 모드를 사용하는 것이 좋습니다.
첫눈에 조금 신비 할 수 있다는 데 동의했다. 말하는 것은 초기화 스크립트가 동작을 수행하기 전에 postgres 서비스를 단일 모드로 시작해야한다는 것입니다. 따라서 make_db.ksh 스크립트를 다음과 같이 변경할 수 있으며 원하는 것에 더 가까이 갈 수 있습니다.
참고 , 이것은 최근 다음 커밋에서 변경되었습니다 . 이것은 최신 변경 사항과 함께 작동합니다.
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
이전에는 --single
모드를 사용해야했습니다.
gosu postgres postgres --single <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
gosu postgres postgres --single < /tmp/somefile.sql