File penulisan docker saya memiliki tiga kontainer, web, nginx, dan postgres. Postgres terlihat seperti ini:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
Tujuan saya adalah memasang volume yang sesuai dengan folder lokal yang disebut ./databasedi dalam wadah postgres /var/lib/postgres. Ketika saya mulai wadah ini dan memasukkan data ke postgres, saya memverifikasi bahwa /var/lib/postgres/data/base/penuh dengan data yang saya tambahkan (dalam wadah postgres), tetapi dalam sistem lokal saya, ./databasehanya mendapat datafolder di dalamnya, yaitu ./database/datadibuat, tetapi kosong . Mengapa?
Catatan:
- Ini menyarankan file saya di atas harus berfungsi.
- Orang ini menggunakan layanan buruh pelabuhan yang menarik
PEMBARUAN 1
Atas saran Nick, saya melakukan docker inspectdan menemukan:
"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": ""
}
],
Yang membuatnya tampak seperti data sedang dicuri oleh volume lain saya tidak kode sendiri. Tidak yakin kenapa seperti itu. Apakah gambar postgres membuat volume itu untuk saya? Jika demikian, apakah ada cara untuk menggunakan volume itu alih-alih volume yang saya pasang saat memulai ulang? Jika tidak, apakah ada cara yang baik untuk menonaktifkan volume lain itu dan menggunakan volume saya sendiri ./database?
PEMBARUAN 2
Saya menemukan solusinya, terima kasih kepada Nick! (dan teman lain) Jawab di bawah.
from app import dbdan db.create_all()dari docker runsetelah memulai wadah. Saya tidak initdblangsung dari baris perintah.
sudo su -dan melihat ke dalam ./database/data. Tidak ada apa-apa di sana sejauh yang saya tahu.
initdbbaris perintah untuk menginisialisasi cluster database Anda?