Docker tập tin soạn thảo của tôi có ba container, web, nginx và postgres. Postgres trông như thế này:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
Mục tiêu của tôi là gắn kết một khối lượng tương ứng với một thư mục cục bộ được gọi ./database
bên trong thùng chứa postgres như /var/lib/postgres
. Khi tôi khởi động các thùng chứa này và chèn dữ liệu vào postgres, tôi xác minh rằng /var/lib/postgres/data/base/
nó chứa đầy dữ liệu tôi đang thêm (trong thùng chứa postgres), nhưng trong hệ thống cục bộ của tôi, ./database
chỉ nhận được một data
thư mục trong đó, tức ./database/data
là được tạo, nhưng nó trống . Tại sao?
Ghi chú:
- Điều này cho thấy tập tin trên của tôi nên hoạt động.
- Người này đang sử dụng dịch vụ docker rất thú vị
CẬP NHẬT 1
Theo đề nghị của Nick, tôi đã làm một docker inspect
và tìm thấy:
"Mounts": [
{
"Source": "/Users/alex/Documents/MyApp/database",
"Destination": "/var/lib/postgresql",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
},
{
"Name": "e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35",
"Source": "/var/lib/docker/volumes/e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35/_data",
"Destination": "/var/lib/postgresql/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
Điều này làm cho có vẻ như dữ liệu đang bị đánh cắp bởi một tập khác mà tôi không tự viết mã. Không chắc sao lại thế. Là hình ảnh postgres tạo ra khối lượng đó cho tôi? Nếu vậy, có cách nào để sử dụng âm lượng đó thay vì âm lượng tôi đang lắp khi khởi động lại không? Mặt khác, có cách nào tốt để vô hiệu hóa âm lượng khác đó và sử dụng âm lượng của riêng tôi ./database
không?
CẬP NHẬT 2
Tôi tìm thấy giải pháp, nhờ Nick! (và một người bạn khác) Trả lời dưới đây.
from app import db
và db.create_all()
từ docker run
sau khi bắt đầu các thùng chứa. Tôi không initdb
trực tiếp từ dòng lệnh.
sudo su -
và nhìn vào ./database/data
. Không có gì trong đó xa như tôi có thể nói.
initdb
dòng lệnh để khởi tạo cụm cơ sở dữ liệu của mình chưa?