2015-06-30 63 views
0

我试图dockerize postgresql服务器,同时坚持在主机上的数据。我的容器工作没有来自主机的安装体积细小,但它崩溃,因为与这些卷的权限:Postgresql与码头:致命:无法读取目录的权限:权限被拒绝

FATAL: could not read permissions of directory "/var/lib/postgresql/9.4/main": Permission denied

我泊坞窗运行命令

docker run -p 54332:5432 -v `pwd`/volumes/postgres/log:/var/log/postgresql -v `pwd`/volumes/postgres/lib:/var/lib/postgresql mypostgres` 

和我的搬运工文件:

FROM ubuntu:trusty 

RUN apt-get update && \ 
    apt-get install wget --assume-yes 

RUN echo "deb http://apt.postgresql.org/pub/repos/apt trusty-pgdg main" >> /etc/apt/sources.list &&\ 
    wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add - 

RUN apt-get update &&\ 
    apt-get install postgresql-9.4-postgis-2.1 postgresql-contrib --assume-yes 

RUN mkdir /home/postgres/ && \ 
    chown -R postgres /home/postgres 

USER postgres 

# make .pgpass file 
RUN echo "127.0.0.1:5432:database:username:password" >> /home/postgres/.pgpass 

RUN /etc/init.d/postgresql start &&\ 
    psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&\ 
    createdb -O docker docker 

# Adjust PostgreSQL configuration so that remote connections to the 
# database are possible. 
RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/9.4/main/pg_hba.conf 

RUN echo "listen_addresses='*'" >> /etc/postgresql/9.4/main/postgresql.conf 

# Expose the PostgreSQL port 
EXPOSE 5432 

# Add VOLUMEs to allow backup of config, logs and databases 
VOLUME ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"] 

# Set the default command to run when starting the container 
CMD ["/usr/lib/postgresql/9.4/bin/postgres", "-D", "/var/lib/postgresql/9.4/main", "-c", "config_file=/etc/postgresql/9.4/main/postgresql.conf"] 
+0

主机系统的操作系统/分布是什么? – lsowen

+0

这是一个Ubuntu服务器,运行到virtualbox,因为我在windows下开发。我认为这可能是由于某些安装的文件夹权限,但无法通过复制文件,更改权限来解决该问题...... – Ben

回答

0

这是因为:

  • 你是在Windows上运行的VirtualBox虚拟机本身运行的泊坞窗主机
  • 你安装一个码头工人卷它是Windows和泊坞窗主机之间共享

目录试试这个:

docker run -p 54332:5432 -v /tmp/volumes/postgres/log:/var/log/postgresql -v /tmp/volumes/postgres/lib:/var/lib/postgresql mypostgres 

它应该工作为/tmp不是VirtualBox与Windows主机共享的路径。

+0

谢谢,它解决了权限问题。但是,它仍然不工作,我有一个错误,因为某些目录不存在: '致命:数据目录“/var/lib/postgresql/9.4/main”不存在“ – Ben

+0

对不起,听到这一点。我几个星期前自己加了这个问题,而且这个伎俩。你的情况一定有其他的东西。可以肯定的是,你是否还尝试过一个不是'/ tmp'的路径(因为'/ tmp'具有非常特殊的权限)? – Thomasleveil

+0

是的,我尝试从git中拉出文件,并运行主目录中的所有内容,但错误是相同的 – Ben