Docker oluşturma dosyamda üç kapsayıcı var: web, nginx ve postgres. Postgres şöyle görünür:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
Amacım ./databasepostgres kapsayıcısı olarak adlandırılan yerel bir klasöre karşılık gelen bir birim bağlamaktır /var/lib/postgres. Bu kapsayıcıları başlattığımda ve postgres'e veri eklediğimde, eklediğim verilerle /var/lib/postgres/data/base/(postgres kapsayıcısında) dolu olduğunu doğruladım , ancak yerel sistemimde ./databasesadece bir dataklasör var, yani ./database/dataoluşturuldu, ancak boş . Neden?
Notlar:
- Bu, yukarıdaki dosyamın çalışması gerektiğini gösteriyor.
- Bu kişi ilginç olan liman hizmetlerini kullanıyor
GÜNCELLEME 1
Nick'in önerisine göre, yaptım docker inspectve buldum:
"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": ""
}
],
Bu da veriyi kendim kodlamadığım başka bir cilt tarafından çalınıyor gibi görünüyor. Neden böyle emin değilim. Postgres görüntüsü benim için bu birimi oluşturuyor mu? Öyleyse, yeniden başlattığımda monte ettiğim birim yerine bu birimi kullanmanın bir yolu var mı? Aksi takdirde, diğer cildi devre dışı bırakmanın ve kendiminkini kullanmanın iyi bir yolu var ./databasemı?
GÜNCELLEME 2
Çözümü buldum, Nick sayesinde! (ve başka bir arkadaş) Aşağıdaki cevap.
from app import dbve db.create_all()bir docker runkonteyner başladıktan sonra. Bilmiyorum initdbkomut satırından doğrudan.
sudo su -ve içine bakmak için başka nasıl bilmiyorum ./database/data. Orada söyleyebildiğim kadarıyla hiçbir şey yok.
initdbveritabanı kümenizi başlatmak için komut satırını zaten çalıştırıyor musunuz?