PostgreSQL 18 và volume mount chính xác
Một thay đổi đường dẫn đủ khiến database trông như mất dữ liệu.
Nắm bản chất
PostgreSQL Official Image phiên bản 18 thay đổi layout dữ liệu khuyến nghị:
mount volume tại /var/lib/postgresql và để image quản lý thư mục
version-specific phía dưới. Những ví dụ từ PostgreSQL 17 trở xuống thường mount
/var/lib/postgresql/data; không nên sao chép nguyên mà không kiểm
tra tài liệu của tag đang dùng.
Database mới có thể được tự khởi tạo khi data directory trống. Nếu mount sai hoặc thay volume/project name, Postgres có thể tạo cluster mới khiến bạn tưởng dữ liệu cũ đã bị xóa. Đừng kết luận mất dữ liệu trước khi kiểm tra volumes và mount paths.
Luồng hoạt động
Hãy tự giải thích mỗi mũi tên: dữ liệu, quyền hoặc tín hiệu nào được truyền qua bước này?
Lệnh & cấu hình mẫu
services:
db:
image: postgres:18
environment:
POSTGRES_DB: appdb
POSTGRES_USER: app
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
volumes:
- pgdata:/var/lib/postgresql
secrets: [db_password]
volumes:
pgdata:
secrets:
db_password:
file: ./secrets/db_password.txt
Lệnh có placeholder hoặc phụ thuộc môi trường thì cần thay thông tin thực tế, kiểm tra quyền và chỉ thực hiện trên tài nguyên được phép.
Bài tập 10–20 phút
Khởi động database lab, tạo bảng và một row. Chạy
docker compose down (không -v), khởi động lại rồi
xác minh dữ liệu tồn tại.
Lỗi dễ mắc
POSTGRES_PASSWORD_FILE thường chỉ được dùng trong
initialization khi data dir mới. Đổi secret file sau đó không tự thay mật
khẩu user trong database đã tồn tại.
Tự kiểm tra
Với Postgres Official Image 18, mount volume vào path nào trong bài lab?Xem đáp án ↗
/var/lib/postgresql.
Học thêm qua lab
Bài học nền tảng có thể thực hiện trực tiếp bằng các lệnh trên; bảng tra cứu nhanh giúp ôn tập.
→ Mở bảng lệnh tra cứu nhanhĐối chiếu tài liệu gốc
Cú pháp và khả năng hỗ trợ có thể thay đổi theo phiên bản. Trước khi dùng Production, hãy kiểm tra tài liệu tương ứng.
Mở tài liệu chính thức ↗