docker postgres 无法更改 pgdata 权限

Posted

技术标签:

【中文标题】docker postgres 无法更改 pgdata 权限【英文标题】:docker postgres not able to change pgdata permissions 【发布时间】:2020-08-10 02:42:29 【问题描述】:

我有一个项目,我使用 google 计算引擎来托管我的应用程序和 docker 来容器化它。

我有一个 postgres 映像,我想在重新启动容器时使用一个卷来使我的数据持久化。此外,我希望将数据库数据存储在谷歌存储中。所以我有一个谷歌存储桶,我已经在我的谷歌计算引擎中安装了一个目录到这个存储桶。具体来说,我所做的是mkdir /home/vetter_leo/data,其中数据是我想用作卷的文件夹,然后我使用gcsfuse --dir-mode 777 --file-mode 777 -o allow_other --implicit-dirs artifacts.helenos-273112.appspot.com /home/vetter_leo/data/ 挂载它。

我的 postgres 镜像的 dockerfile 是这样的:

FROM postgres:latest

USER postgres

ENV POSTGRES_USER helenos
ENV POSTGRES_PASSWORD helenos
ENV POSTGRES_DB helenos
ENV PGDATA /var/lib/postgresql/data/pgdata

COPY init_helenos_schema.sql /docker-entrypoint-initdb.d/

EXPOSE 5432

我的 docker-compose 文件是这样的:

version: "3.5"

services:

  postgres:
    container_name: postgres
    image: postgres
    build:
      context: .
      dockerfile: ./postgres.prod.dockerfile
    volumes:
      - /home/vetter_leo/data:/var/lib/postgresql/data

networks:
  default:
    external:
      name: helenos-network

在执行docker-compose -f docker-compose.yml up -d --build 时,我最终导致容器未启动,并且显示此错误chmod: changing permissions of '/var/lib/postgresql/data/pgdata': Operation not permitted

我已经在网上搜索过,但到目前为止我还没有找到解决问题的方法。任何帮助将不胜感激。谢谢。

【问题讨论】:

这种方法在性能和数据一致性方面似乎不是最优的,因为每次更改时数据库数据都会通过网络传输。为什么不使用persistent disk? 在确认永久性磁盘是这种情况的解决方案后,所有不适合简短评论的内容都将作为完整答案发布。 【参考方案1】:

我最终使用了 @mebius99 建议的持久磁盘,它可以正常工作,所以不再有问题了。

【讨论】:

以上是关于docker postgres 无法更改 pgdata 权限的主要内容,如果未能解决你的问题,请参考以下文章

Postgres 和 Docker 在文件更改时重新部署

Django 无法在 Docker 设置中连接到 Postgres

无法使用 docker 连接到 ipv6 中的 postgres

docker-compose spring boot无法连接到Postgres [重复]

Docker CLI 无法使用“不允许附加属性 postgres”进行组合

节点服务器无法通过 Docker 连接到 Postgres,使用 TypeORM