thiagoh
thiagoh

Reputation: 7378

Run postgresql docker image with persistent data returns permission error

I've been running my docker images upon my Vagrant machine (the box is ubuntu 14.04) without any big issues. But the following error is racking my brains. I wish you people can help me.

When I run this:

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

I get this error

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"

I've tried open all the permissions of /vagrant/postgresql without success. Maybe this is a problem of the official docker image.

EDIT:

I've just noticed that that is a lot of people facing the same problem as me: https://github.com/docker-library/postgres/issues/26

And, as someone asked about this in the comments, here it goes:

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

Upvotes: 2

Views: 2127

Answers (2)

Windsooon
Windsooon

Reputation: 7110

Just make sure your Vagrant user has the permission to access this directory:

ls -ld /vagrant/postgresql/data

And as deinspanjer said. you can use named volume for persisting the data

Upvotes: 0

deinspanjer
deinspanjer

Reputation: 515

If you are just concerned about persisting the data, I would recommend using a data volume instead of a host volume.

Run docker volume create --name pgdata Then connect it to your container with: docker run --rm --name pg -v pgdata:/var/lib/PostgreSQL/data postgres:9.2

Even after that container is gone, you can start a new one connected to the volume and your data will be there.

Upvotes: 4

Related Questions