Bạn đang ghi đè lệnh command
ban đầu và bạn không bắt đầu postgres trong tập lệnh này, đó là lý do tại sao cơ sở dữ liệu của bạn không khả dụng.
Bạn có thể đặt quá trình khởi tạo cơ sở dữ liệu của mình vào thư mục entrypoint của vùng chứa:/docker-entrypoint-initdb.d
. Điều này thực thi tất cả *.sh
và *.sql
các tệp trong thư mục này và không chạm vào command
ban đầu .
Tất cả các tệp trong thư mục này được tự động thực thi theo thứ tự bảng chữ cái khi tạo vùng chứa . Do đó, hãy tạo một ổ đĩa để thêm các tệp script / sql của bạn vào entrypoint và để vùng chứa thực thi chúng. Điều này được mô tả trong tài liệu postgres chính thức, phần "Cách mở rộng hình ảnh này"
.
Sau đó, tệp soạn thảo của bạn sẽ thay đổi thành một cái gì đó như thế này:
postgres:
build: ./postgres
volumes:
- /shared_folder/postgresql:/var/lib/postgresql
- ./db-init-scripts:/docker-entrypoint-initdb.d
ports:
- "5432:5432"
trong khi một thư mục cục bộ, ví dụ:db-init-scripts
, chứa các tập lệnh khởi tạo của bạn (đổi tên nếu bạn muốn). Sao chép create_db.sh
vào thư mục này và nó sẽ tự động được thực thi khi bạn tạo một vùng chứa mới.
Một số hình ảnh cơ sở dữ liệu xem thư mục entrypoint này, rất tiện lợi.
container_name: postgres
của bạn có vẻ thừa.