【问题标题】:Postgres running in docker-compose unable to write data to mounted volume在 docker-compose 中运行的 Postgres 无法将数据写入已安装的卷
【发布时间】:2022-01-17 05:59:48
【问题描述】:

说明

我在 docker-compose 中运行一个 Postgres 容器。我正在使用下面docker-compose.yml 中的卷将 Postgres 所需的 /data 目录安装到容器中。

资格

  1. 必须调用 Postgres 用户 graph-node 并创建一个名为 graph-node 的数据库
  2. 出于特定于应用程序的原因,我使用下面的boot.sh 脚​​本删除了每个docker-compose up 之前的data/postgres/ 文件夹。只要知道/data/postgres 在每次运行docker-compose up 时都会重新创建。

预期行为 Postgres 启动并将它需要的所有文件写入已挂载的/data/postgres 卷。

实际行为 Postgres 可以正常启动,但不会向卷中写入任何内容。

可能的原因

这感觉像是读/写权限问题?我按照建议在卷的第三栏中添加了:rw,仍然没有雪茄。我在数据目录上运行chmod -R a+rwx ./data 以递归方式访问所有文件。

最奇怪的是,如果我在启动后手动运行chmod -R a+rwx ./data,Postgres 突然能够将所有需要的文件写入目录。但是,如果我在创建它之前运行它,如下所示(递归地用于 /data 中的所有事物)它不起作用。

文件

boot.sh

# Check for data/ dir. If found, make it recursively rwx for all users. Otherwise, create it and make it recursively rwx for all users.

if [ -d "./data" ]
then
    chmod -R a+rwx ./data
else
    mkdir data
    chmod -R a+rwx ./data
fi

if [ -d "./data/postgres" ]
then
    rm -rf data/postgres
else
    echo "No data/postgres dir found. Proceeding"
fi

docker-compose -f docker-compose.yml up

docker-compose.yml

version: "3"
services:
  postgres:
    image: postgres
    ports:
      - '5432:5432'
    command:
      [
        "postgres",
        "-cshared_preload_libraries=pg_stat_statements"
      ]
    environment:
      POSTGRES_USER: graph-node
      POSTGRES_PASSWORD: let-me-in
      POSTGRES_DB: graph-node
    volumes:
      - ./data/postgres:/var/lib/postgresql/data:rw

机器 + 软件规格

操作系统: Windows 10、WSL2、Ubuntu

Docker 版本: 20.10.7(直接在机器上运行,因为它是 Ubuntu,而不是像在 Mac 上那样在 Docker Desktop 中运行)

【问题讨论】:

    标签: postgresql bash docker docker-compose


    【解决方案1】:

    嗯,不完全是一个答案,但因为我只需要 Postgres 的一次运行临时存储(无论如何我都在删除运行之间的数据/目录)我通过删除外部卷并让 Postgres 将数据写入解决了这个问题容器本身,它肯定拥有特权。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 2020-11-23
      相关资源
      最近更新 更多