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 ./database
postgres 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 ./database
sadece bir data
klasör var, yani ./database/data
oluş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 inspect
ve 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 ./database
mı?
GÜNCELLEME 2
Çözümü buldum, Nick sayesinde! (ve başka bir arkadaş) Aşağıdaki cevap.
from app import db
ve db.create_all()
bir docker run
konteyner başladıktan sonra. Bilmiyorum initdb
komut 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.
initdb
veritabanı kümenizi başlatmak için komut satırını zaten çalıştırıyor musunuz?