postgresql - 启动 postgres 容器时出错 - mkdir : Permission denied

标签 postgresql docker docker-compose nfs

我正在使用以下 docker-compose.yml 启动 postgres 容器

version: '3'
services:
  db:
    image: postgres:latest
    container_name: postgres
    environment:
      POSTGRES_USER: usr
      POSTGRES_PASSWORD: pswd
      POSTGRES_DB: db
      PGDATA: /var/lib/postgresql/data/pgdata
    ports:
        - 5432:5432
    volumes:
        - nfs_cur_dir:/var/lib/postgresql/data

volumes:
  nfs_cur_dir:
    driver: local
    driver_opts:
      type: nfs
      o: "addr=10.15.187.88,rw"
      device: ":/u/uname/home/database"

启动容器时出现以下错误
$sudo ./docker-compose  up db
Starting postgres ... done
Attaching to postgres
postgres    | mkdir: cannot create directory ‘/var/lib/postgresql/data’: Permission denied
postgres exited with code 1
database 上的权限目录是 777
drwxrwxrwx 3 uname grpname 4096 May 5 22:57 database
失败后我也看到pgdata这样创建的目录 -
drwx------ 2 polkitd root 4096 May 5 22:57 pgdata
笔记:
  • postgres 的数据目录映射到 NFS 位置。因此,我在 docker-compose 中定义了一个新的 NFS 卷并将其映射到 postgres 容器。
  • 我正在使用 PGDATA env 变量为数据目录定义不同的位置。
  • 除了以上两点,没有什么特别的。如果我为数据目录使用本地驱动器位置,这工作正常!
  • 最佳答案

    您应该检查 NFS 共享公开的权限。
    根据你说的,如果你使用本地驱动器它工作正常。这就是为什么我认为 NFS 共享的权限没有像您期望的那样工作。
    也许您应该在尝试运行应用程序之前创建目录。

    关于postgresql - 启动 postgres 容器时出错 - mkdir : Permission denied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61628796/

    相关文章:

    linux - 在 Linux 上运行程序化 Postgres 数据库迁移的最佳实践

    ruby-on-rails - 如何创建迁移以通过某些列添加唯一约束范围

    docker - 如何使用 serverspec 测试 Jenkins 是否在 jenkins docker 容器中运行?

    Docker 以 root 身份挂载卷

    docker - 如何在Ansible中使用环境变量?

    php - docker-compose使用旧卷

    docker - 你能定义可选的 docker-compose 服务吗?

    postgresql - 如何在 PostgreSQL 中创建 guid

    ruby-on-rails - 在多个条件下使用 pg textsearch

    docker - 如何在没有环境变量的情况下从该主机上的 docker 容器中获取 docker 主机的主机名