EDIT - kể từ ngày 23 tháng 7 năm 2015
Các hình ảnh postgres Docker chính thức sẽ chạy .sql
script tìm thấy trong /docker-entrypoint-initdb.d/
thư mục.
Vì vậy, tất cả những gì bạn cần là tạo tập lệnh sql sau:
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
và thêm nó vào Dockerfile của bạn:
Dockerfile
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/
Nhưng kể từ ngày 08 tháng bảy năm 2015, nếu tất cả các bạn cần là để tạo ra một người sử dụng và cơ sở dữ liệu , nó là dễ dàng hơn để chỉ làm cho sử dụng đến POSTGRES_USER
, POSTGRES_PASSWORD
và POSTGRES_DB
các biến môi trường:
docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
hoặc với Dockerfile:
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
cho hình ảnh cũ hơn ngày 23 tháng 7 năm 2015
Từ tài liệu của hình ảnh Docker postgres , người ta nói rằng
[...] Nó sẽ lấy bất kỳ tập lệnh * .sh nào được tìm thấy trong thư mục đó [ /docker-entrypoint-initdb.d
] để thực hiện khởi tạo thêm trước khi bắt đầu dịch vụ
Điều quan trọng ở đây là "trước khi bắt đầu dịch vụ" . Điều này có nghĩa là tập lệnh make_db.sh của bạn sẽ được thực thi trước khi dịch vụ postgres được khởi động, do đó thông báo lỗi "không thể kết nối với postgres cơ sở dữ liệu" .
Sau đó, có một thông tin hữu ích khác:
Nếu bạn cần thực thi các lệnh SQL như là một phần của việc khởi tạo, việc sử dụng chế độ người dùng đơn Postgres rất được khuyến khích.
Đồng ý điều này có thể là một chút bí ẩn ở cái nhìn đầu tiên. Những gì nó nói là tập lệnh khởi tạo của bạn sẽ bắt đầu dịch vụ postgres ở chế độ đơn trước khi thực hiện hành động của nó. Vì vậy, bạn có thể thay đổi make_db.ksh tập lệnh như sau và nó sẽ giúp bạn đến gần hơn với những gì bạn muốn:
LƯU Ý , điều này đã thay đổi gần đây trong cam kết sau đây . Điều này sẽ làm việc với sự thay đổi mới nhất:
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
Trước đây, việc sử dụng --single
chế độ là bắt buộc:
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