J'essaie désespérément de mettre sur pied un projet Docker dont j'ai hérité, et Docker me pose des problèmes sans fin. Lorsque j'essaie de démarrer mes conteneurs, le message d'erreur suivant s'affiche sur mon conteneur Postgresql:
FATAL: "/var/lib/postgresql/data" is not a valid data directory
DETAIL: File "/var/lib/postgresql/data/PG_VERSION" does not contain valid data.
HINT: You might need to initdb.
Le projet est un projet Rails qui utilise également les conteneurs Redis, ElasticSearch et Sidekiq - ceux-ci se chargent tous très bien.
docker-compose.yml:
postgres:
image: postgres:9.6.2
environment:
POSTGRES_USER: $PG_USER
POSTGRES_PASSWORD: $PG_PASS
ports:
- '5432:5432'
volumes:
- postgres:/var/lib/postgresql/data
/var/lib/postgresql/data
appartient à l'utilisateur postgres (comme il se doit, je crois) et le service postgresql démarre et fonctionne correctement.
J'ai essayé d'exécuter initdb
à partir du répertoire /usr/lib/postgresql/9.6/bin
, ainsi que de docker (à partir de docker, il ne semble pas persister ni même créer quoi que ce soit ... si quelqu'un sait pourquoi je voudrais savoir)
Le contenu du répertoire /var/lib/postgresql/data
:
drwxrwxrwx 19 postgres postgres 4096 Jun 28 20:41 .
drwxr-xr-x 5 postgres postgres 4096 Jun 28 20:41 ..
drwx------ 5 postgres postgres 4096 Jun 28 20:41 base
drwx------ 2 postgres postgres 4096 Jun 28 20:41 global
drwx------ 2 postgres postgres 4096 Jun 28 20:41 pg_clog
drwx------ 2 postgres postgres 4096 Jun 28 20:41 pg_commit_ts
drwx------ 2 postgres postgres 4096 Jun 28 20:41 pg_dynshmem
-rw------- 1 postgres postgres 4468 Jun 28 20:41 pg_hba.conf
-rw------- 1 postgres postgres 1636 Jun 28 20:41 pg_ident.conf
drwx------ 4 postgres postgres 4096 Jun 28 20:41 pg_logical
drwx------ 4 postgres postgres 4096 Jun 28 20:41 pg_multixact
drwx------ 2 postgres postgres 4096 Jun 28 20:41 pg_notify
drwx------ 2 postgres postgres 4096 Jun 28 20:41 pg_replslot
drwx------ 2 postgres postgres 4096 Jun 28 20:41 pg_serial
drwx------ 2 postgres postgres 4096 Jun 28 20:41 pg_snapshots
drwx------ 2 postgres postgres 4096 Jun 28 20:41 pg_stat
drwx------ 2 postgres postgres 4096 Jun 28 20:41 pg_stat_tmp
drwx------ 2 postgres postgres 4096 Jun 28 20:41 pg_subtrans
drwx------ 2 postgres postgres 4096 Jun 28 20:41 pg_tblspc
drwx------ 2 postgres postgres 4096 Jun 28 20:41 pg_twophase
-rw------- 1 postgres postgres 4 Jun 28 20:41 PG_VERSION
drwx------ 3 postgres postgres 4096 Jun 28 20:41 pg_xlog
-rw------- 1 postgres postgres 88 Jun 28 20:41 postgresql.auto.conf
-rw------- 1 postgres postgres 22267 Jun 28 20:41 postgresql.conf
PG_VERSION
contient 9,6
Toute aide est très appréciée.
vous modifiez le chemin de données postgresql par défaut, vous devez donc initialiser la base de données. essaye ça
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
voici le fichier init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
Ainsi, lorsque vous avez postgres:/var/lib/postgresql/data
, il va monter /var/lib/postgresql/data
sur un volume de données de menu fixe appelé postgres
. Les volumes de données Docker sont tous stockés ensemble dans un emplacement qui varie en fonction du système d'exploitation.
Essayez de le changer en ./postgres
pour lui faire créer un répertoire appelé postgres
par rapport à votre répertoire de travail.
Comme la source change, la base de données sera recréée et je serais prêt à réparer l'erreur que vous voyez. Sinon, il pourrait s'agir d'un problème d'autorisation sur l'hôte hôte.