CHỈNH SỬA - kể từ ngày 23 tháng 7 năm 2015
Hình ảnh docker postgres chính thức sẽ chạy .sql
tập lệnh được 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 8 tháng 7 năm 2015, nếu tất cả những gì bạn cần là tạo người dùng và cơ sở dữ liệu , sẽ dễ dàng hơn nếu chỉ sử dụng POSTGRES_USER
, POSTGRES_PASSWORD
và POSTGRES_DB
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 những 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ẽ tạo nguồn bất kỳ tập lệnh * .sh nào được tìm thấy trong thư mục đó [
/docker-entrypoint-initdb.d
] để 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 của bạn make_db.sh sẽ được thực thi trước khi dịch vụ postgres được bắt đầu, do đó, thông báo lỗi "không thể kết nối với cơ sở dữ liệu postgres" .
Sau đó là 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ư một phần trong quá trình khởi tạo của mình, thì việc sử dụng chế độ người dùng đơn Postgres rất được khuyến khích.
Đồng ý rằng điều này có thể hơi 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 nên khởi động dịch vụ postgres ở chế độ duy nhất trước khi thực hiện các hành động của nó. Vì vậy, bạn có thể thay đổi make_db.ksh của mình script như sau và nó sẽ đưa 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. Điều này sẽ hoạt động với 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ế độ được yêu cầu:
gosu postgres postgres --single <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL