首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用卷持久化postgres数据库中的数据

如何使用卷持久化postgres数据库中的数据
EN

Stack Overflow用户
提问于 2017-01-13 15:02:12
回答 4查看 288K关注 0票数 348

我的坞撰写文件有三个容器,web,nginx和postgres。Postgres看起来是这样的:

代码语言:javascript
复制
postgres:
  container_name: postgres
  restart: always
  image: postgres:latest
  volumes:
    - ./database:/var/lib/postgresql
  ports:
    - 5432:5432

我的目标是挂载一个卷,它对应于postgres容器中的一个名为./database的本地文件夹,名为/var/lib/postgres。当我启动这些容器并将数据插入postgres时,我会验证/var/lib/postgres/data/base/是否装满了我添加的数据(在postgres容器中),但是在我的本地系统中,./database只在其中获得一个data文件夹,即创建了./database/data,但它是空的。为什么?

备注:

更新1

根据尼克的建议,我做了一个docker inspect,发现:

代码语言:javascript
复制
    "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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-01-14 14:10:23

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

代码语言:javascript
复制
volumes:
  - ./postgres-data:/var/lib/postgresql

代码语言:javascript
复制
volumes:
  - ./postgres-data:/var/lib/postgresql/data
票数 440
EN

Stack Overflow用户

发布于 2017-08-10 06:51:17

可以为所有Postgres数据创建公共的

代码语言:javascript
复制
docker volume create pgdata

也可以将其设置为撰写文件。

代码语言:javascript
复制
version: "3"
services:
  db:
    image: postgres
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgress
      - POSTGRES_DB=postgres
    ports:
      - "5433:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
      - suruse
volumes:
  pgdata:

它将创建卷名pgdata并将此卷挂载到容器的路径。

你可以检查这个卷

代码语言:javascript
复制
docker volume inspect pgdata
代码语言:javascript
复制
// output will be
[
    {
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/pgdata/_data",
        "Name": "pgdata",
        "Options": {},
        "Scope": "local"
    }
]
票数 172
EN

Stack Overflow用户

发布于 2017-01-13 18:43:19

我会避免使用相对路径。请记住,docker是一个守护进程/客户端关系。

当您执行撰写时,它本质上只是分解成不同的docker客户端命令,然后将这些命令传递给守护进程。然后,该./database相对于守护进程,而不是客户机。

现在,在这个问题上,码头开发团队有一些反复的经验。,但底线是,它可以有一些意想不到的结果。

简而言之,不要使用相对路径,而是使用绝对路径。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41637505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档