ボリュームを使用してDocker化されたPostgresデータベースにデータを永続化する方法 質問する

ボリュームを使用してDocker化されたPostgresデータベースにデータを永続化する方法 質問する

私の 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

おすすめ記事