postgresql - dockervolumes中 "device"和 "mountpoint"的含义

标签 postgresql docker docker-compose docker-volume

我想澄清执行命令时“设备”和“挂载点”的含义

docker 卷检查

在 Postgres 容器中。我在 /user/data/test_postgresdb_vol_2 中手动创建了 test_postgresdb_vol_2 文件夹来存储容器中的数据,但现在我很困惑,因为我有两个不同的路径。你能澄清一下发生了什么以及它的含义是什么吗 “设备”路径和“安装点”路径。

体积检查示例:

[
    {
        "CreatedAt": "...",
        "Driver": "local",
        "Labels": {
            ....
        },
        "Mountpoint": "/var/lib/docker/volumes/test_pgdata/_data",
        "Name": "test_pgdata",
        "Options": {
            "device": "/user/data/test_postgresdb_vol_2",
            "o": "bind",
            "type": "none"
        },
        "Scope": "local"
    }
]

docker-compose 示例:

postgres:
  container_name: postgres
  image: postgres
  volumes:
    - pgdata:/var/lib/postgresql/data 
  environment:
    ...
    PGDATA: /var/lib/postgresql/data/pgdata
volumes:
  pgdata:
    driver: local
    driver_opts:
       o: bind
       type: none
       device: /user/data/test_postgresdb_vol_2

最佳答案

docker volume inspect 中的详细信息输出是可以安全忽略的实现细节。

在内部,Docker 命名卷的当前标准实现使它们在 /var/lib/docker/volumes 内存在文件系统。 。在本例中,您已经告诉 Docker 该卷实际上应该通过 mount(2) 系统调用创建,更具体地说,作为绑定(bind)类型挂载。您看到的选项可能是mount(8)

的参数
/sbin/mount -o bind $DEVICE $MOUNT_POINT

您可能会注意到 DriverOptions匹配您直接在 docker-compose.yml 中指定的内容文件,pgdata与卷的名称匹配,test匹配当前目录的名称(更具体地说是 Compose 项目名称,如果您覆盖它),并且 test_pgdata它出现的地方是两者的组合。

这些对于标准应用程序代码来说都不重要。来自docker-compose在您显示的文件中,您声明命名卷为 local并由特定主机目录支持,并且它安装到 postgres特定路径上的容器。 inspect -type 命令会生成您几乎不需要的低级调试数据。

关于postgresql - dockervolumes中 "device"和 "mountpoint"的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62042183/

相关文章:

java - Postgres分区表触发器插入重复记录

docker - 如何在 Github Action 上登录 pull registry for services

docker - Docker + Nginx允许来自外部docker的上游gunicorn

sql - 当一列可以为空时,如何在 2 列上设置唯一约束

sql - 重新启动,以便 nextval 是下一个未使用的 id

sql - 列的 SUM 和分组依据的问题

docker - 在 docker-compose 中将 secomp 设置为不受限制

azure - Linux 容器上的 Azure Function 的 Docker 问题 - 函数缺失导致函数运行时出现 404

java - 如何在 Spring Boot Dockerized 应用程序中连接到特定的本地 MongoDB 实例?

docker - 在本地环境中,我应该使用 docker-compose 还是 kubernetes (minikube)?