私のdocker composeファイルには、web、nginx、postgresの3つのコンテナーがあります。Postgresは次のようになります。
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
私の目標は./database
、postgresコンテナー内でと呼ばれるローカルフォルダーに対応するボリュームをマウントすること/var/lib/postgres
です。これらのコンテナーを起動してデータをpostgresに挿入する/var/lib/postgres/data/base/
と、追加したデータが(postgresコンテナーに)いっぱいであることを確認しますが、ローカルシステムで./database
は、data
フォルダーを取得するだけです(つまり./database/data
、作成されますが、空です) 。どうして?
ノート:
アップデート1
ニックの提案に従って、私はa docker inspect
を見つけて見つけました:
"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": ""
}
],
そのため、自分でコーディングしていない別のボリュームによってデータが盗まれているように見えます。なぜだかわかりません。postgresイメージは私のためにそのボリュームを作成していますか?もしそうなら、再起動時にマウントしているボリュームの代わりにそのボリュームを使用する方法はありますか?そうでなければ、他のボリュームを無効にして自分のボリュームを使用する良い方法はあり./database
ますか?
アップデート2
私はニックのおかげで解決策を見つけました!(および別の友人)以下で答えてください。
from app import db
し、db.create_all()
からdocker run
コンテナを開始した後。initdb
コマンドラインから直接操作することはありません。
sudo su -
で、ルックを./database/data
。私の知る限り、そこには何もありません。
initdb
コマンドラインを実行してデータベースクラスターを初期化しましたか?