web-dev-qa-db-fra.com

Docker ne reconnaît pas le répertoire de données Postgresql

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.

5
WebDev

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;
4
Frodo

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.

0
cwurtz