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 ./database
di 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, ./database
hanya mendapat data
folder di dalamnya, yaitu ./database/data
dibuat, 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 inspect
dan 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 db
dan db.create_all()
dari docker run
setelah memulai wadah. Saya tidak initdb
langsung dari baris perintah.
sudo su -
dan melihat ke dalam ./database/data
. Tidak ada apa-apa di sana sejauh yang saya tahu.
initdb
baris perintah untuk menginisialisasi cluster database Anda?