私の 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 にデータを挿入すると、(postgres コンテナ内で) 追加しているデータで がいっぱいになっていることを確認します/var/lib/postgres/data/base/
が、ローカル システムでは、その中にフォルダ./database
が 1 つだけあります。つまり、 が作成されますが、空です。なぜでしょうか。data
./database/data
ノート:
アップデート1
Nick の提案に従って、実行したところ、次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
?
ベストアンサー1
奇妙なことに、解決策は変化することになりました
volumes:
- ./postgres-data:/var/lib/postgresql
に
volumes:
- ./postgres-data:/var/lib/postgresql/data