一尘不染

如何使用卷将数据持久化在dockerized postgres数据库中

docker

我的docker compose文件包含三个容器:web,nginx和postgres。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容器中),但是在我的本地系统中,./databasedata在其中获得了一个文件夹,即已./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

更新2

感谢尼克,我找到了解决方案!(和另一个朋友)在下面回答。


阅读 275

收藏
2020-06-17

共1个答案

一尘不染

奇怪的是,解决方案最终不得不改变

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

volumes:
  - ./postgres-data:/var/lib/postgresql/data
2020-06-17