Vấn đề là postgres Dockerfile khai báo "/ var / lib / postgresql / data" dưới dạng một ổ đĩa. Đây chỉ là một thư mục bình thường nằm ngoài Hệ thống Tệp Liên minh được sử dụng bởi hình ảnh. Các tập sẽ tồn tại cho đến khi không có vùng chứa nào liên kết đến chúng và chúng bị xóa rõ ràng.
Bạn có một số lựa chọn:
- Sử dụng
--volumes-from
lệnh chia sẻ dữ liệu với các vùng chứa mới. Cách này sẽ chỉ hoạt động nếu chỉ có một hình ảnh postgres đang chạy tại một thời điểm, nhưng đó là giải pháp tốt nhất. - Viết Dockerfile của riêng bạn để tạo dữ liệu trước khi khai báo ổ đĩa. Sau đó, dữ liệu này sẽ được sao chép vào ổ đĩa khi vùng chứa được tạo.
- Viết một entrypoint hoặc tập lệnh cmd sẽ điền vào cơ sở dữ liệu tại thời điểm chạy.
Tất cả các đề xuất này đều yêu cầu bạn sử dụng Khối lượng để quản lý dữ liệu khi vùng chứa đang chạy. Ngoài ra, bạn có thể viết Dockerfile của riêng mình và chỉ cần không khai báo một ổ đĩa. Sau đó, bạn có thể sử dụng docker commit
để tạo một hình ảnh mới sau khi thêm dữ liệu. Điều này có thể sẽ hiệu quả trong ngắn hạn, nhưng chắc chắn không phải là cách bạn nên làm việc với vùng chứa - nó không thể lặp lại và cuối cùng bạn sẽ sử dụng hết các lớp trong Hệ thống tệp Union.
Hãy xem tài liệu Docker chính thức về quản lý dữ liệu trong vùng chứa để biết thêm thông tin.