Postgresql with docker: FATAL: could not read permissions of directory: Permission denied

I’m trying to dockerize a postgresql server while persisting the data on the host. My container works fine without mounting volumes from the host, but it crashes because of permissions with those volumes:

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

  • Find opened sockets in docker container
  • Error accessing cgi script inside Docker container, Operation not permitted: Couldn't bind unix domain socket
  • Is LXD is used in production?
  • Automatically mounting host folders other than c:\Users in Docker images in Windows
  • How can docker downloading new image output log messages can be supressed?
  • Operation not permitted systemctl with docker + systemctl
  • my docker run command is

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

    and my docker file:

    FROM ubuntu:trusty
    RUN apt-get update && \
        apt-get install wget --assume-yes
    RUN echo "deb trusty-pgdg main" >> /etc/apt/sources.list &&\
        wget --quiet -O - | 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 "" >> /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  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"]

  • How to claim free space generated by deleting docker images in Mac
  • Gitlab behind HAProxy with ssl termination
  • Wildfly/Jboss-v10 is not working in cluster mode with docker swarm
  • Docker build error - OSError: [Errno 2] No such file or directory
  • Pass in variables or answer Dockerfile
  • Docker permissions development environment using a host mounted volume
  • One Solution collect form web for “Postgresql with docker: FATAL: could not read permissions of directory: Permission denied”

    This happens because:

    • you are on Windows running a VirtualBox VM, itself running the docker host
    • you are mounting a docker volume for a directory which is shared between Windows and the docker host

    Try this:

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

    it should work as /tmp is not a path shared by VirtualBox with the Windows host.

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.