当试图使用卷时,Postgresql引发'数据目录拥有错误的所有权'

我试图在docker容器中运行postgresql,但当然我需要我的数据库数据是持久性的,所以我试图使用数据只有容器,这暴露卷来存储数据库在这个地方。

所以,我的数据容器有这样的Dockerfile:

FROM ubuntu # Create data directory RUN mkdir -p /data/postgresql # Create /data volume VOLUME /data/postgresql 

我运行的是:

 docker run --name postgresql_data lyapun/postgresql_data true 

在我的postgresql.conf中设置:

 data_directory = '/data/postgresql' 

然后我以这种方式运行我的postgresql容器:

 docker run -d --name postgre --volumes-from postgresql_data lyapun/postgresql 

我得到了:

 2014-07-04 07:45:57 GMT FATAL: data directory "/data/postgresql" has wrong ownership 2014-07-04 07:45:57 GMT HINT: The server must be started by the user that owns the data directory. 

如何处理这个问题? 我GOOGLE了很多,以find有关使用docker卷postgresql的一些信息,但我没有find任何东西。

谢谢!

好的,好像我find了解决这个问题的办法。

而不是像这样运行postgres:

 CMD ["/usr/lib/postgresql/9.1/bin/postgres", "-D", "/var/lib/postgresql/9.1/main", "-c", "config_file=/etc/postgresql/9.1/main/postgresql.conf"] 

我写了bash脚本:

 chown -Rf postgres:postgres /data/postgresql chmod -R 700 /data/postgresql sudo -u postgres /usr/lib/postgresql/9.1/bin/postgres -D /var/lib/postgresql/9.1/main -c config_file=/etc/postgresql/9.1/main/postgresql.conf 

并将postgresql映像中的CMDreplace为:

 CMD ["bash", "/run.sh"] 

有用!

您必须将directory / data / postgresql的所有权设置为您正在运行postgresql二进制文件的同一用户。 例如,在Ubuntu中通常是postgres用户。

那么你必须使用这个命令:

 chown postgres.postgres /data/postgresql 

一个更好的方法来解决这个问题,假设你的postgres镜像被命名为“postgres”,你的备份是./backup.tar:

首先,将此添加到您的postgres Dockerfile中:

 VOLUME ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"] 

然后运行:

 docker run -it --name postgres -v $(pwd):/db postgres sh -c "tar xvf /db/backup.tar --no-overwrite-dir" && \ docker run -it --name data --volumes-from postgres busybox true && \ docker rm postgres && \ docker run -it --name postgres --volumes-from=data postgres 

您没有权限问题,因为归档文件是由postgres图像的postgres用户提取的,所以它是提取文件的所有者。 然后您可以使用数据容器备份您的数据。 这种解决scheme的优点是,每次运行映像时都不要chmod / chown。