【问题标题】:Run postgresql docker image with persistent data returns permission error使用持久数据运行 postgresql docker 映像返回权限错误
【发布时间】:2017-02-10 03:14:49
【问题描述】:

我一直在我的 Vagrant 机器(盒子是 ubuntu 14.04)上运行我的 docker 镜像,没有任何大问题。但是下面的错误让我绞尽脑汁。我希望你们能帮助我。

当我运行这个时:

$ docker run -it -v /vagrant/postgresql/data:/var/lib/postgresql/data postgres:9.2

我收到此错误

The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

fixing permissions on existing directory /var/lib/postgresql/data ... ok
initdb: could not create directory "/var/lib/postgresql/data/pg_xlog": Permission denied
initdb: removing contents of data directory "/var/lib/postgresql/data"
vagrant@legionat:/vagrant/sonarqube$ docker run -it -v /vagrant/postgresql/data:/var/lib/postgresql/data postgres:9.2
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

fixing permissions on existing directory /var/lib/postgresql/data ... ok
initdb: could not create directory "/var/lib/postgresql/data/pg_xlog": Permission denied
initdb: removing contents of data directory "/var/lib/postgresql/data"

我尝试打开 /vagrant/postgresql 的所有权限,但没有成功。也许这是官方docker镜像的问题。

编辑:

我刚刚注意到很多人和我面临同样的问题:https://github.com/docker-library/postgres/issues/26

而且,正如有人在 cmets 中询问的那样,这里是这样的:

$ ls -l /vagrant/postgresql/data
total 0

【问题讨论】:

  • 你的主机是什么操作系统?我假设 /vagrant 从那里安装到​​ VM 中?你能把ls -l /vagrant/postgresql/data的输出贴在VM里面吗?
  • @sprkysnrky 已编辑!

标签: postgresql docker permissions ubuntu-14.04


【解决方案1】:

如果您只是关心数据的持久化,我建议您使用数据卷而不是主机卷。

运行docker volume create --name pgdata 然后将其连接到您的容器: docker run --rm --name pg -v pgdata:/var/lib/PostgreSQL/data postgres:9.2

即使在该容器消失后,您也可以启动一个连接到该卷的新容器,并且您的数据将在那里。

【讨论】:

    【解决方案2】:

    只需确保您的 Vagrant 用户有权访问此目录:

    ls -ld /vagrant/postgresql/data
    

    正如 deinspanjer 所说。您可以使用命名卷来持久化数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 2018-12-14
      • 2022-01-17
      • 1970-01-01
      • 2020-04-06
      • 2020-11-13
      • 1970-01-01
      相关资源
      最近更新 更多