1. ホーム

[解決済み】Docker化したPostgresデータベースのデータをボリュームで永続化する方法

2022-04-17 10:40:42

質問

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

ニックの提案により、私は 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

解決策が見つかりました!ニックのおかげです。(そしてもう一人の友人も) 答えは以下の通りです。

解決方法は?

不思議なことに、結局、解決策は

volumes:
  - ./postgres-data:/var/lib/postgresql

になります。

volumes:
  - ./postgres-data:/var/lib/postgresql/data