Mój plik komponowania dokera ma trzy kontenery, web, nginx i postgres. Postgres wygląda następująco:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
Moim celem jest zamontowanie woluminu odpowiadającego folderowi lokalnemu o nazwie ./database
wewnątrz kontenera postgres as /var/lib/postgres
. Kiedy uruchamiam te kontenery i wstawiam dane do postgres, sprawdzam, czy /var/lib/postgres/data/base/
jest pełne danych, które dodaję (w kontenerze postgres), ale w moim systemie lokalnym ./database
dostaje tylko data
folder, tzn. ./database/data
Jest tworzony, ale jest pusty . Czemu?
Uwagi:
- To sugeruje, że mój powyższy plik powinien działać.
- Ta osoba korzysta z usług dokerów, co jest interesujące
AKTUALIZACJA 1
Zgodnie z sugestią Nicka zrobiłem docker inspect
i znalazłem:
"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": ""
}
],
Co sprawia, że wygląda na to, że dane są kradzione przez inny wolumin, którego sam nie kodowałem. Nie jestem pewien, dlaczego tak jest. Czy obraz postgres tworzy dla mnie ten wolumin? Jeśli tak, to czy jest jakiś sposób na użycie tego woluminu zamiast woluminu, który instaluję po ponownym uruchomieniu? W przeciwnym razie, czy istnieje dobry sposób na wyłączenie tego innego woluminu i użycie własnego ./database
?
AKTUALIZACJA 2
Znalazłem rozwiązanie, dzięki Nickowi! (i inny przyjaciel) Odpowiedz poniżej.
from app import db
i db.create_all()
od A docker run
po uruchomieniu pojemników. Nie initdb
bezpośrednio z wiersza poleceń.
sudo su -
i zajrzeć ./database/data
. O ile mi wiadomo, nic tam nie ma.
initdb
wiersz poleceń, aby zainicjować klaster bazy danych?