私の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コマンドラインを実行してデータベースクラスターを初期化しましたか?